标签: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
标签:http hash 排序 public 写代码 move 链表 输入 com
原文地址:https://www.cnblogs.com/heibingtai/p/14044939.html