zoukankan      html  css  js  c++  java
  • 【LeetCode每日一题】2020.6.26 面试题 02.01. 移除重复节点

    面试题 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
    
  • 相关阅读:
    maven-仓库
    maven-坐标与依赖
    maven-认识
    mysql-介绍
    redis-主从复制
    UVA
    UVA
    UVA
    UVA
    [ Java学习 ] 查阅资料整理 004
  • 原文地址:https://www.cnblogs.com/enmac/p/13197693.html
Copyright © 2011-2022 走看看