通过给出排序的链接列表,删除所有重复项,以使每个元素仅出现一次。(链接:https://leetcode.com/problems/remove-duplicates-from-sorted-list/) 我已经有了解决方案,但是我对下面的其他解决方案感到困惑。
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
curr = head
prev = ListNode(0)
# prev.next = curr
rec = prev
while curr:
while curr.next and curr.val == curr.next.val:
curr = curr.next
prev.next = curr
print('prev1:',prev)
prev = curr
print('prev2:',prev )
curr = curr.next
print('rec :',rec)
return rec.next
输入:
[1,1,2,3,3]
输出:
[1,2,3]
打印:
prev1: ListNode{val: 0, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}}}
prev2: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}}
rec : ListNode{val: 0, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}}}
问题1:为什么rec
与prev2
在这里不一样?
prev1: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}}
prev2: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}
rec : ListNode{val: 0, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 3, next: None}}}}}
prev1: ListNode{val: 2, next: ListNode{val: 3, next: None}}
prev2: ListNode{val: 3, next: None}
rec : ListNode{val: 0, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}}}
问题2:为什么rec
在这里ListNode{val: 0, next: ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}}}
?
答案 0 :(得分:0)
您首先构造prev
:prev = ListNode(0)
然后您将rec
指向它:rec = prev
,因此rec
现在指向一个具有值0
的新节点。
curr
从head
开始,因为它已传递到函数中,并且循环从列表curr
开始向前移动head
,直到到达最后一个结点为止。仍具有当前值,与head
的值匹配。
然后将.next
的{{1}}(因此,prev
的它是同一节点)指向rec
。
curr
然后更新为指向prev
(值curr
),但是1
仍指向值rec
的同一节点。 / p>
0
然后更新为指向curr
(值curr.next
)并重复该过程。
这回答了您的第一个问题:2
与rec
指向的节点不同,这是作为prev
的值打印出来的。
随着该过程的继续,在每个具有重复值的最后一个节点中进行链接,并跳过所有具有相同值的先前节点,最后得到prev2:
指向值{{ 1}}(已初始化),并且运行中所有具有唯一值的节点从rec
开始。
这回答了您的第二个问题-出于与问题1相同的原因,它以0
开头,而其余的正是您所期望的,如果您意识到具有值{{1 }}是所构建链的起点。