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

LeetCodeE-移除重复节点

时间:2020-12-01 12:35:57      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:http   hash   排序   public   写代码   move   链表   输入   com   

 

非商业,LeetCode链接附上:

https://leetcode-cn.com/problems/remove-duplicate-node-lcci/

进入正题。

 

题目:

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

 

示例:

示例1:

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

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

链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
进阶:

如果不得使用临时缓冲区,该怎么解决?

 

代码实现:

//节点
class ListNode {

    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
    }
}

public ListNode removeDuplicateNodes(ListNode head) {
        
        if(head == null) {
            return null;
        }

        Set<Integer> set = new HashSet<>();
        set.add(head.val);
        ListNode pos = head;

        while(pos.next != null) {

            ListNode cur = pos.next;//当前待删除节点
            if(set.add(cur.val)) {
                pos = pos.next;
            } else {
                pos.next = pos.next.next;
            }
        }
        pos.next = null;

        return head;
}
//时间复杂度O(n),空间复杂度O(n)

 

分析:

链表问题,尤其是涉及到要删除链表中某节点的情况,要注意设置合适的“前驱节点”。

链表问题会经常用到“哨兵节点”也是通过一个额外的辅助前驱节点简化相关操作。

 

--End

 

LeetCodeE-移除重复节点

标签:http   hash   排序   public   写代码   move   链表   输入   com   

原文地址:https://www.cnblogs.com/heibingtai/p/14044939.html

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