剑指offer
JZ76 删除链表中重复的结点
示例1
输入:
{1,2,3,3,4,4,5}
返回值:
{1,2,5}
示例2
输入:
{1,1,1,8}
返回值:
{8}
思路:链表题
- 首先用dummy头作为空的头结点,方便统一处理。tail结点作为返回链表的尾结点。(dummy是不同的,遍历只是改变了tail的位置)。
- 判断pHead、pHead.next是否相同,若不同,则 tail=pHead, tail=tail.next
- 若相同,则pHead遍历到第一个与pHead.next不同的位置
- 循环3,4 结束循环后让tail.next=None(重要!!!因为否则会让最后tail结点还有指向的结点,例如344566,结果就会为34566)
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplication(self , pHead: ListNode) -> ListNode:
if pHead==None or pHead.next==None: return pHead
dummy = ListNode(-1)
# dummy.next = pHead
tail = dummy
while(pHead):
if pHead.next==None or pHead.val!=pHead.next.val :
tail.next = pHead
tail = tail.next
while(pHead.next and pHead.val == pHead.next.val):
pHead = pHead.next
pHead = pHead.next
tail.next = None #重要
return dummy.next