Новости IT, Tech-лайфхаки & Кодинг

Решение задачи #21. Python LeetCode, Merge two sorted lists

Опубликовано: 19.05.2025, 05:10 | Автор: HDHai

Задача на работу со связными списками и указателями.

Вариант решения задачи на Python с LeetCode

Категория: Алгоритмы.
Название задачи: Merge two sorted lists.
Сложность: Легкая.
Статус решения: "Решено".

Условие задачи:
Даны головы двух отсортированных связных списков list1 и list2. Объедините эти два списка в один отсортированный список. Новый список должен быть составлен путем соединения узлов исходных списков (без создания новых узлов). Верните голову объединенного связного списка.

Примечания:
Оба списка list1 и list2 уже отсортированы в порядке неубывания. Нельзя создавать новые узлы, нужно только переставлять указатели next существующих узлов.

Решение:


Python

# Определение узла связного списка
class ListNode(object):
    def __init__(self, val=0, next=None):
        self.val = val    # Значение узла
        self.next = next  # Ссылка на следующий узел

class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        Объединяет два отсортированных связных списка в один отсортированный список.
        
        Аргументы:
            list1: Голова первого связного списка
            list2: Голова второго связного списка
            
        Возвращает:
            Голову объединенного отсортированного связного списка
        """
        # Создаем фиктивный узел для упрощения кода
        dummy = ListNode(-1)
        # Указатель для построения нового списка
        current = dummy
        
        # Пока в обоих списках есть элементы
        while list1 is not None and list2 is not None:
            # Сравниваем значения текущих узлов
            if list1.val <= list2.val:
                current.next = list1  # Добавляем узел из list1
                list1 = list1.next    # Перемещаем указатель list1
            else:
                current.next = list2  # Добавляем узел из list2
                list2 = list2.next    # Перемещаем указатель list2
            current = current.next   # Перемещаем указатель current
        
        # Добавляем оставшиеся элементы из list1 или list2
        if list1 is not None:
            current.next = list1
        else:
            current.next = list2
        
        # Возвращаем голову нового списка (пропускаем фиктивный узел)
        return dummy.next

Мы рассмотрели пример решения, который был принят и засчитан платформой LeetCode как правильный, но вы можете найти свой способ решения задачи, возможно лучше.

Источник решения: hdhai.com