Я решаю вопрос Leetcode (проблема № 21), который принимает два отсортированных связанных списка и возвращает отсортированный объединенный список. Например, Input: 1-> 2-> 4, 1-> 3-> 4 и Output: 1-> 1-> 2-> 3 → 4-> 4.
Я не супер опыт со связанными списками, но я пытаюсь решить больше проблем, чтобы получить доступ. Вместо возврата желаемого результата из [1,1,2,3,4,4] мой код просто возвращает [4]. Тем не менее, я думаю, что основная логика есть, и я надеюсь, что что-то небольшое.
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
newList = ListNode(0) # used for single, merged list
while l1 and l2:
if l1.val <= l2.val: # compare current node values
newList.next = l1
l1 = l1.next
else:
newList.next = l2
l2 = l2.next
return newList.next # first node is 0, which we don't want
Основная логика почти отсутствует, но вы только каждый раз заменяете следующий элемент в списке (вы не продвинули список), таким образом вы возвращаете только последний элемент. Решение состоит в том, чтобы создать еще один "указатель курсора" для продвижения списка, сохраняя при этом newList "передним указателем" для возврата результата.
Также в конце вы должны "concat" с непустым списком
def mergeTwoLists(self, l1, l2):
newList = ListNode(0)
cur = newList
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 or l2 # add non-empty list
return newList.next
l1 or l2
дает нам непустой список, если он есть. if можно записать как: if l1: cur.next = l1 else: cur.next = l2
a1=[3,9,1]
a2=[8,3,4]
a = a1 + a2
a.sort()
Должен сделать трюк.