在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
注意是把重复的所有结点都删除。
思路:用一个指针指向已经处理好的部分的结尾。另外两个指针,一快一慢,找到重复的结点。
class Solution:
def deleteDuplication(self, pHead):
# write code here
# 基准指针
pPre = None
# 慢指针
pCur = pHead
# 快指针
pNext = None
while pCur != None:
# 有重复的结点
if pCur.next != None and pCur.val == pCur.next.val:
# 赋值快指针
pNext = pCur.next
# 让快指针移动,直至找到数值不同的结点
while pNext.next != None and pNext.next.val == pCur.val:
pNext = pNext.next # 推出循环的时候, pNext是最后一个的重复结点。
# 如果头结点就是重复的结点,头节点也要移动。
if pCur == pHead:
pHead = pNext.next
# 否则的话,基准结点要指向目前数值不一样的那个结点。
else:
pPre.next = pNext.next
# 慢指针同样要移动到该位置
pCur = pNext.next
# 如果当前不重复,直接移动基准指针和慢指针
else:
pPre = pCur
pCur = pCur.next
return pHead
class Solution:
def deleteDuplication(self, pHead):
# 基准指针
pPre = None
# 慢指针
pCur = pHead
# 快指针
pNext = None
while pCur != None:
# 有重复的结点
if pCur.next != None and pCur.val == pCur.next.val:
# 赋值快指针
pNext = pCur.next
# 让快指针移动,直至找到数值不同的结点
while pNext.next != None and pNext.next.val == pCur.val:
pNext = pNext.next # 退出循环的时候, pNext是最后一个的重复结点。
# 如果头结点就是重复的结点,头节点也要移动。
if pCur == pHead:
pHead = pNext.next
# 否则的话,基准结点要指向目前数值不一样的那个结点。
else:
pPre.next = pNext.next
# 慢指针同样要移动到该位置
pCur = pNext.next
# 如果当前不重复,直接移动基准指针和慢指针
else:
pPre = pCur
pCur = pCur.next
return pHead