Реверс односвязного списка - C#
Формулировка задачи:
Есть список
и есть функция Реверса, то есть первый элемент становиться последним и т.д.
Функция работает, но вопрос в том, что она делает,я ни как не могу понять каким образом она его переворачивает. Помогите, пожалуйста, разобраться)
new MyNode(1){Next = new MyNode(2) {Next = new MyNode(3) {Next = new MyNode(4) {Next = new MyNode(5)}}}};private static void RecursiveReverse(ref MyNode list)
{
MyNode first;
MyNode rest;
if (list == null) return;
first = list;
rest = first.Next;
if (rest==null)
{
return;
}
RecursiveReverse(ref rest);
first.Next.Next = first;
first.Next = null;
list = rest;
}Решение задачи: «Реверс односвязного списка»
textual
Листинг программы
static SinglyLinkedNode<string> Revers(SinglyLinkedNode<string> head) {
SinglyLinkedNode<string> next0 = head.NextNode;
head.NextNode = null;
SinglyLinkedNode<string> next1 = next0.NextNode;
next0.NextNode = head;
do {
head = next0;
next0 = next1;
next1 = next0.NextNode;
next0.NextNode = head;
} while (next1 != null);
return next0;
}
public class SinglyLinkedNode<T> where T : class {
SinglyLinkedNode<T> nextNode;
public SinglyLinkedNode<T> NextNode { get { return nextNode; } set { nextNode = value; } }
public T Value { get; set; }
public void AddAfter(SinglyLinkedNode<T> node) {
if (node != null) {
SinglyLinkedNode<T> currentNext = nextNode;
nextNode = node;
if (currentNext != null)
node.AddAfter(currentNext);
}
}
}