题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
两个指针,p1,p2,p1记录当前不重复的最前一个结点,p2负责探路
如果p2和p2.next不相等,则p2,p1都向后移动一个
如果相等,p2就移动到重复元素的下一位,p1将next设置为p2
代码:
class Solution:
def deleteDuplication(self, pHead):
# write code here
if not pHead:
return None
H = ListNode(0)
H.next = pHead
p1 = H
p2 = pHead
while p2 and p2.next:
if p2.next.val != p2.val:
p1 = p1.next
p2 = p2.next
else:
while p2.next.val == p2.val:
p2 = p2.next
if not p2.next:
break
p2 = p2.next
p1.next = p2
return H.next