Created
October 22, 2017 20:35
-
-
Save unilecs/2669c05c89a8ec5424202568a8ad359d to your computer and use it in GitHub Desktop.
Является ли односвязный список палиндромом
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
public class Program | |
{ | |
public class LinkedList | |
{ | |
public int Value { get; set; } | |
public LinkedList Next { get; set; } | |
} | |
public static bool LinkedListIsPalindrome(LinkedList head) | |
{ | |
var stack = new Stack<LinkedList>(); | |
LinkedList fastPointer = head; | |
LinkedList slowPointer = head; | |
// когда быстрый бегунок (двигается со скоростью 2x) достигает конца списка | |
// мы узнаем где середина | |
while (fastPointer != null && fastPointer.Next != null) | |
{ | |
// записываем узлы в стек | |
stack.Push(slowPointer); | |
slowPointer = slowPointer.Next; | |
fastPointer = fastPointer.Next.Next; | |
} | |
// нечетное кол-во элементов в списке, пропускаем средний элемент | |
if (fastPointer != null) | |
{ | |
slowPointer = slowPointer.Next; | |
} | |
while (slowPointer != null) | |
{ | |
// если значения различаются, это не палиндром | |
if (slowPointer.Value != stack.Pop().Value) | |
{ | |
return false; | |
} | |
slowPointer = slowPointer.Next; | |
} | |
return true; | |
} | |
public static void Main() | |
{ | |
Console.WriteLine("UniLecs"); | |
var root = new LinkedList { Value = 1 }; | |
root.Next = new LinkedList { Value = 2 }; | |
root.Next.Next = new LinkedList { Value = 3 }; | |
root.Next.Next.Next = new LinkedList { Value = 2 }; | |
root.Next.Next.Next.Next = new LinkedList { Value = 1 }; | |
root.Next.Next.Next.Next.Next = null; | |
var linkedListIsPalindrom = LinkedListIsPalindrome(root); | |
Console.WriteLine("Linked list is palindrom: {0}", linkedListIsPalindrom); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment