Объединение двух отсортированных связанных списков — распространенная задача в программировании, и к ней можно подойти несколькими способами. В этой статье мы рассмотрим различные методы эффективного объединения двух отсортированных связанных списков, используя разговорный язык, и предоставим примеры кода для каждого метода.
Метод 1: итеративный подход
Один простой метод объединения двух отсортированных связанных списков — использование итеративного подхода. Мы можем создать новый связанный список и сравнить значения узлов из обоих списков. Постоянно выбирая меньшее значение, мы можем построить объединенный список.
def merge_lists_iterative(head1, head2):
dummy = ListNode(0)
current = dummy
while head1 and head2:
if head1.val <= head2.val:
current.next = head1
head1 = head1.next
else:
current.next = head2
head2 = head2.next
current = current.next
if head1:
current.next = head1
if head2:
current.next = head2
return dummy.next
Метод 2: рекурсивный подход
Другой подход использует рекурсию для объединения двух отсортированных связанных списков. Мы можем сравнить значения текущих узлов и рекурсивно вызвать функцию для объединения оставшихся узлов.
def merge_lists_recursive(head1, head2):
if not head1:
return head2
if not head2:
return head1
if head1.val <= head2.val:
merged_head = head1
merged_head.next = merge_lists_recursive(head1.next, head2)
else:
merged_head = head2
merged_head.next = merge_lists_recursive(head1, head2.next)
return merged_head
Метод 3: слияние на месте.
Если нам разрешено изменять существующие связанные списки, мы можем выполнить слияние на месте, переставив указатели узлов.
def merge_lists_inplace(head1, head2):
if not head1:
return head2
if not head2:
return head1
if head1.val > head2.val:
head1, head2 = head2, head1
merged_head = head1
while head1.next and head2:
if head1.next.val <= head2.val:
head1 = head1.next
else:
temp = head1.next
head1.next = head2
head2 = temp
if not head1.next:
head1.next = head2
return merged_head
В этой статье мы рассмотрели три различных метода объединения двух отсортированных связанных списков: итеративный подход, рекурсивный подход и объединение на месте. Каждый метод имеет свои преимущества и может использоваться в зависимости от конкретных требований вашего приложения. Понимая эти методы и используя предоставленные примеры кода, вы сможете эффективно объединять отсортированные связанные списки в своих проектах программирования.