Leetcode做题日记:83. 删除排序链表中的重复元素(PYTHON)

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2

示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

第一次的代码:
比上一题的代码多了一条语句

	tem=pre=ListNode(-1)
        tem.next=head
        while head and head.next:
            if head.val==head.next.val:
                while head and head.next and head.val==head.next.val:
                    head=head.next
                pre.next=head #当head和下一节点不一样时,更新pre 
                head=head.next #更新head为下一节点
		pre=pre.next #更新pre,保存这个head
            else:
                pre=pre.next
                head=head.next
        return tem.next

36ms,排名99%

当然,可以直接对给定链表head操作
第二次代码:
首先tem和pre都表示给定链表head,但是tem=tem.next,即tem表示给定链表的下一个。然后判断ten和pre是否相同,相同,则tem继续更新,直到不同,pre更新next为tem。最后pre.next=None,即若还没有更新pre,while已经遍历了多个值相同的tem,这些值是不能要的,所以最后要修改pre.next,当然,若,head没有重复的数字,手动添加一个next=None也是对的

	if not head:
            return []
        tem=pre=head
        tem=tem.next
        while tem:
            if tem.val==pre.val:
                tem=tem.next
            else:
                pre.next=tem
                tem=tem.next
                pre=pre.next
        pre.next=None        
        return head 

44ms,排名22%,我相信这不真实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值