Реверс односвязного списка - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д