leetcode--删除排序链表中的重复元素--python

题目

题目详情

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

示例

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

解题代码

思路

  1. 我们需要删除的是一个排序的链表里重复的值
  2. 那么就需要两个指针来进行遍历,那么遍历完成的一个条件就是p1.next == None
  3. 前面的两个指针可以简化为一个指针,前后指针嘛,前一个是p1,那么后一个就是p1.next。
  4. 需要注意的点是需要判断删除节点为最后一个节点的话,要注意删除后,指针最后指向的是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

猜你喜欢

转载自blog.csdn.net/qq_39722988/article/details/89313458
今日推荐