面试题 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;
}