Я работаю над проблемой слияния двух списков из кода leet.Эта проблема требует объединения двух связанных списков отсортированным способом.Код решения приведен ниже.В коде переменная prev постоянно обновляется и в итоге имеет только один узел из l1 или l2.Тем не менее, prehead, кажется, запоминает всякий раз, когда выполняется prev.next.Тем не менее, он не запоминает, когда prev = prev.next выполняется.
Например, если вы запустите этот код для l1 = 1->3->4, l2 = 1->2->4
.В конце:
prev = ListNode{val: 4, next: ListNode{val: 4, next: None}}.
prehead = ListNode{val: -1, next: ListNode{val: 1, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 4, next: ListNode{val: 4, next: None}}}}}}}
prehead = ListNode(-1)
prev = prehead
while l1 and l2:
if l1.val <= l2.val:
prev.next = l1
l1 = l1.next
else:
prev.next = l2
l2 = l2.next
prev = prev.next
# exactly one of l1 and l2 can be non-null at this point, so connect
# the non-null list to the end of the merged list.
prev.next = l1 if l1 is not None else l2
return prehead.next