力扣02.01题——【移除重复节点】

#思路

1、首先明确链表在某种程度上相当于一条牵引绳,temp=head之后,链表也可由temp主导,两个指针,一个当探子,一个走探子走过的路

2、想到重复元素可以用哈希表,先定义,然后想到如果链表为非空,那第一个元素需要被保留,        使用hash[head.val]=1

3、写出双指针框架,此框架针对于探子指针

4、用哈希表判断curr目前遍历的是不是重复元素,然后更新哈希表

5、接着将此元素链接到表头,更新temp指针

6、temp会成为最后一个结点的指针,跳出循环后,需要指向None,否则如果后面都是重复元素,temp仍然停留在最后一个不重复结点上,打印时,因为没有明确结尾,所以后面重复元素也被打印;此外可能会引发后续不可预期的问题,比如无限循环(如果后续节点形成了环)或者访问到不应该访问的数据等。

#代码

class Solution:
    def removeDuplicateNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:       
        
        if head==None:
            return None
        temp=head 
        hash=[0 for i in range(20001)]
        curr=head.next
        hash[head.val]=1
        while curr:
            if hash[curr.val]==0:
                hash[curr.val]=1
                temp.next=curr
                temp=temp.next#这是移动指针的固定语法
            curr=curr.next
        temp.next=None
        return head

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值