文章目录
- 题目
- 题目详情
- 示例
- 解题代码
- 思路
- 代码
- 运行结果
- 最佳方案
题目
题目详情
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例
输入: 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 = headif p1 is None:return headwhile p1.next is not None:if p1.val == p1.next.val:if p1.next is None: #这里就是要注意的点,要删除的节点为最后一个节点p1.next = Noneelse:p1.next = p1.next.nextelse:p1 = p1.nextreturn head
运行结果
最佳方案
用时为44ms的一个最佳方案,给大家参考参考
class Solution:def deleteDuplicates(self, head: 'ListNode') -> 'ListNode':if head == None:return headh = headtp = headtmp = head.valhead = head.nextwhile head != None:if tmp == head.val:head = head.nexttp.next = headelse:tmp = head.valhead = head.nexttp = tp.nextreturn h