12/300
- 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
#第一次尝试出现了问题:
#class Solution:
# def deleteDuplicates(self, head: ListNode) -> ListNode:
# cur = head
# while cur and cur.next:
# if cur.val == cur.next.val:
# cur.next = cur.next.next
# cur = cur.next
# else:
# cur = cur.next
# return head
'''
input:[1,1,1]
output:[1,1]
desired output:[1]
问题就是只能两个两个对比,一旦重复数字超过俩,就凉了。
所以要多加一个prev指针,指定重复数据的第一个,然后while循环到最后一个的后一个node退出,得到cur。
把不符合循环的这个node,也就是cur,挂在prev后面。然后让pre和cur重逢,开始新的一轮。
'''
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
dummy = ListNode(None)
dummy.next = head
prev = cur = head
while cur:
cur = cur.next
while cur and prev.val == cur.val:
cur = cur.next
prev.next = cur
prev = cur
return dummy.next