Чтобы перевернуть связанный список в C#, вы можете использовать несколько методов. Вот несколько часто используемых подходов:
- Итеративный подход.
В этом методе вы перебираете связанный список и меняете указатели, чтобы изменить порядок узлов.
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;
}
- Стековой подход.
В этом методе вы используете стек для инвертирования связанного списка.
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;
}