4 подписчика
Как объединить два связанных списка на Python? Это первая задача на литкоде, которую я так и не смог решить.
Проблема в том, что в питоне как бы нет такой структуры. Она реализована в библиотеке collections как deque (очередь), и если ей не пользоваться, то придется сначала оформить соответвующий объект прямо в своем коде.
Поначалу я ковырялся в двух данных списках, которые в условии выглядели как обычный list, а на поверку оказались объектами класса LinkedList, заранее реализованного в форме для ответа. Это означало, что работать сними как со списками, при помощи методов списков и прочих операторов, невозможно. Вообще у класса LinkedList в задаче не было ничего кроме двух атрибутов - value и next. Как и положено теории связанных списков, первый хранил значение, а второй должен был служить ссылкой на очередное значение. Тут-то я и застрял. Как должна выглядеть ссылка на очередное значение, было до отчаяния непонятно.
Просветление пришло. В качестве аргумента next объект класса LinkedList принимал также объект класса LinkedList! Казалось, решение близко. Однако, как я ни бился, у меня выходили только монструозные нерабочие нечитаемые варианты.
В итоге, я решил сдаться и заглянуть в решения.
Смысл самого изящного и быстрого был в следующем. Автор создавал две вспомогательных ссылки cur и dummy на один объект класса LinkedList. Затем он сравнивал атрибуты val двух данных списков, и в случае если первый меньше второго, ставил ссылку cur на объект list1, а также переставлял ссылку list1 на атрибут next того же объекта list1, т.е. list1 = list1.next. В противном случае проделывалось то же самое, только с объектом list2.
Несмотря на то, что я так и не отправил на проверку никакого своего решения и фактически его так и не нашел, в муках поиска ответа я узнал много нового и полезного о связанных списках, логике работы пайтон с ними, о возможности реализации собственных структур данных.