给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例 1:
输入: head = [1,2,3,3,4,4,5]
输出: [1,2,5]
示例 2:
输入: head = [1,1,1,2,3]
输出: [2,3]
提示:
- 链表中节点数目在范围
[0, 300]内 -100 <= Node.val <= 100- 题目数据保证链表已经按升序 排列
代码
def deleteDuplicates( head):
# 基础模型:三个节点,前置哨兵节点、第一个节点、第二个节点,比较第一个和第二个节点
if head is None:
return None
d = ListNode(next = head) # 因为可能要删除头结点,建立1个初始前置哨兵节点
cur = d # cur记录哨兵节点
while cur.next and cur.next.next:
# 循环条件后两个节点存在(至少2个节点谈重复才有意义)
t = cur.next.val # 先记录第1个需要对比值的节点的值
# 如果第2个节点的值等于第1个的值,需要删除
if cur.next.next.val == t:
while cur.next and cur.next.val == t:
# 如果有多个相等的节点,就从第1个节点(cur.next)开始,依次向后全部删完
cur.next = cur.next.next
else:
cur = cur.next # 更新哨兵节点
return d.next