Реверсирование связанного списка попарно — распространенная проблема в структурах данных и алгоритмах. Он включает в себя переворачивание связанного списка путем замены элементов парами. В этой статье блога мы рассмотрим несколько методов эффективного решения этой проблемы и предоставим примеры кода для каждого подхода.
Метод 1: итеративный подход
Один из способов инвертировать связанный список в парах — использовать итеративный подход. Идея состоит в том, чтобы пройти по связанному списку парами и поменять местами элементы внутри каждой пары. Вот реализация на Python:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_linked_list_in_pairs(head):
dummy = ListNode(0)
dummy.next = head
prev = dummy
while prev.next and prev.next.next:
first = prev.next
second = prev.next.next
first.next = second.next
second.next = first
prev.next = second
prev = prev.next.next
return dummy.next
Метод 2: рекурсивный подход
Другой подход к обращению связанного списка в парах — использование рекурсивного метода. Этот подход предполагает рекурсивную замену элементов попарно. Вот реализация на Python:
def reverse_linked_list_in_pairs(head):
if not head or not head.next:
return head
first = head
second = head.next
first.next = reverse_linked_list_in_pairs(second.next)
second.next = first
return second
Метод 3: стековой подход
Стековой подход также можно использовать для реверсирования связанного списка в парах. Этот метод предполагает использование стека для перестановки элементов попарно. Вот реализация на Python:
def reverse_linked_list_in_pairs(head):
stack = []
dummy = ListNode(0)
dummy.next = head
current = dummy
while current.next and current.next.next:
first = current.next
second = current.next.next
current.next = second
first.next = second.next
second.next = first
stack.append(first)
stack.append(second)
current = current.next.next
while stack:
current.next = stack.pop()
current = current.next
current.next = None
return dummy.next
В этой статье блога мы рассмотрели три различных метода реверсирования связанного списка в парах: итеративный подход, рекурсивный подход и подход на основе стека. Каждый метод предлагает свой способ эффективного решения проблемы. Поняв и внедрив эти методы, вы получите инструменты для эффективного реверсирования связанных списков в парах.