思路:因為重復的節點都要刪除,因此需要標記重復開始前的上一個節點,又因為頭結點有可能是重復的節點,為了操作方便,我們可以再鏈表前面設置一個空節點作為頭結點,因此需要設置3個指針,第一個head指向頭結點。第二個p用來標記重復節點的前面一個節點,第三個cur用來尋找重復的節點,一旦找到p就不移動了,cur繼續往后尋找直到不是重復的節點。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplication(self, pHead):
# write code here
head = ListNode(-1)
p = head
p.next = pHead
cur = pHead
while cur and cur.next:
if cur.val != cur.next.val:
p = p.next
cur = cur.next
else:
val = cur.val
while cur and cur.val == val:
cur = cur.next
p.next = cur
return head.next