Как перевернуть связанный список в C# — методы и примеры

Чтобы перевернуть связанный список в C#, вы можете использовать несколько методов. Вот несколько часто используемых подходов:

  1. Итеративный подход.
    В этом методе вы перебираете связанный список и меняете указатели, чтобы изменить порядок узлов.
public class ListNode
{
    public int Value { get; set; }
    public ListNode Next { get; set; }
}
public ListNode ReverseLinkedList(ListNode head)
{
    ListNode previous = null;
    ListNode current = head;
    while (current != null)
    {
        ListNode next = current.Next;
        current.Next = previous;
        previous = current;
        current = next;
    }
    return previous;
}

<старый старт="2">

  • Рекурсивный подход.
    Рекурсивный метод предполагает обход связанного списка до конца, а затем изменение указателей при возврате назад.
  • public ListNode ReverseLinkedList(ListNode head)
    {
        if (head == null || head.Next == null)
        {
            return head;
        }
        ListNode reversedHead = ReverseLinkedList(head.Next);
        head.Next.Next = head;
        head.Next = null;
        return reversedHead;
    }
    1. Стековой подход.
      В этом методе вы используете стек для инвертирования связанного списка.
    public ListNode ReverseLinkedList(ListNode head)
    {
        if (head == null || head.Next == null)
        {
            return head;
        }
        Stack<ListNode> stack = new Stack<ListNode>();
        while (head != null)
        {
            stack.Push(head);
            head = head.Next;
        }
        ListNode reversedHead = stack.Pop();
        ListNode current = reversedHead;
        while (stack.Count > 0)
        {
            current.Next = stack.Pop();
            current = current.Next;
        }
        current.Next = null;
        return reversedHead;
    }