categories: [Blog,Algorithm]
面试题 02.01. 移除重复节点
难度简单90
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
提示:
- 链表长度在[0, 20000]范围内。
- 链表元素在[0, 20000]范围内。
进阶:
如果不得使用临时缓冲区,该怎么解决?
public ListNode removeDuplicateNodes(ListNode head) {if (head == null) {return head;}Set<Integer> occurred = new HashSet<Integer>();occurred.add(head.val);ListNode pre = head;// 枚举前驱节点while (pre.next != null) {// 当前待删除节点ListNode cur = pre.next;if (occurred.add(cur.val)) {pre = cur;} else {pre.next = cur.next;}}pre.next = null;return head;}
