题目
题目详情
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例
输入: 1->1->2
输出: 1->2
输入: 1->1->2->3->3
输出: 1->2->3
解题代码
思路
- 我们需要删除的是一个排序的链表里重复的值
- 那么就需要两个指针来进行遍历,那么遍历完成的一个条件就是p1.next == None
- 前面的两个指针可以简化为一个指针,前后指针嘛,前一个是p1,那么后一个就是p1.next。
- 需要注意的点是需要判断删除节点为最后一个节点的话,要注意删除后,指针最后指向的是None
代码
class Solution:
def deleteDuplicates(self,head):
p1 = head
if p1 is None:return head
while p1.next is not None:
if p1.val == p1.next.val:
if p1.next is None: #这里就是要注意的点,要删除的节点为最后一个节点
p1.next = None
else:
p1.next = p1.next.next
else:
p1 = p1.next
return head
运行结果
最佳方案
用时为44ms的一个最佳方案,给大家参考参考
class Solution:
def deleteDuplicates(self, head: 'ListNode') -> 'ListNode':
if head == None:
return head
h = head
tp = head
tmp = head.val
head = head.next
while head != None:
if tmp == head.val:
head = head.next
tp.next = head
else:
tmp = head.val
head = head.next
tp = tp.next
return h