给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 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%,我相信这不真实