码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode每日一题】2020.6.26 面试题 02.01. 移除重复节点

时间:2020-06-27 11:35:16      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:保留   直接   写代码   python   判断   head   行操作   des   ref   

面试题 02.01. 移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例:

输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]

输入:[1, 1, 1, 1, 2]
输出:[1, 2]

分析:

? 链表结点移除的本质就是 将被删除结点的前驱结点连向后继结点。下一步可以用HashSet判断重复。由于单向链表结点结构中没有前驱指针,因此我们可以直接对被删除结点的前驱结点进行操作,即pos.next。这样写出来的代码更加简洁。

代码(Python):

class Solution:
    def removeDuplicateNodes(self, head: ListNode) -> ListNode:
        if not head:
            return head
        occurred = {head.val}
        pos = head
        # 枚举前驱节点
        while pos.next:
            # 当前待删除节点
            cur = pos.next
            if cur.val not in occurred:
                occurred.add(cur.val)
                pos = pos.next
            else:
                pos.next = pos.next.next
        return head

【LeetCode每日一题】2020.6.26 面试题 02.01. 移除重复节点

标签:保留   直接   写代码   python   判断   head   行操作   des   ref   

原文地址:https://www.cnblogs.com/enmac/p/13197693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!