解题思路:
定义一个哑结点dummy和两个指针,一个指向初始哑结点的指针pre和一个指向pHead节点的指针cur。

- class Solution:
- def deleteDuplication(self, pHead: ListNode) -> ListNode:
- # write code here
- #定义哑铃节点
- dummy = ListNode(-1)
- dummy.next = pHead
- #pre指针和cur指针分别指向dummy和pHead结点
- pre = dummy
- cur = pHead
-
- while cur and cur.next:
- #定位重复数字的最后一个位置
- while cur.next and cur.val == cur.next.val:
- cur = cur.next
- #维护pre指针,使得pre指针的下一个结点始终指向cur;如果pre.next != cur,则删除
- #重复结点后并维护cur = pre.next
- if pre.next != cur:
- #删除重复结点
- pre.next = cur.next
- #维护cur指针和pre指针的位置关系
- cur = pre.next
- else:
- #当前循环中不存在重复结点时,更新pre指针和cur指针为下一个结点
- pre = cur
- cur = cur.next
- #最终返回头结点
- return dummy.next