首先考虑头结点重复,直接添加一个新结点 preHead 作为头结点
然后考虑重复,这里使用 temp 保存重复的值,通过对比重复的值来删除重复结点中的第一个
循环由删除有序链表中重复的元素-I修改而来
代码如下:
class Solution:
def deleteDuplicates(self , head: ListNode) -> ListNode:
if not head:
return None
preHead, p = ListNode(0), head
pre = preHead
pre.next = p
temp = 0
while p and p.next:
if p.val == p.next.val:
temp = p.val # 记录重复的值
p.next = p.next.next
else:
if p.val == temp:
pre.next = p.next
else:
pre = p
p = p.next
if temp == p.val: # 如果最后一个结点是重复结点
pre.next = None
return preHead.next