categories: [Blog,Algorithm]


面试题 02.01. 移除重复节点

难度简单90
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]

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

提示:

  1. 链表长度在[0, 20000]范围内。
  2. 链表元素在[0, 20000]范围内。

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

  1. public ListNode removeDuplicateNodes(ListNode head) {
  2. if (head == null) {
  3. return head;
  4. }
  5. Set<Integer> occurred = new HashSet<Integer>();
  6. occurred.add(head.val);
  7. ListNode pre = head;
  8. // 枚举前驱节点
  9. while (pre.next != null) {
  10. // 当前待删除节点
  11. ListNode cur = pre.next;
  12. if (occurred.add(cur.val)) {
  13. pre = cur;
  14. } else {
  15. pre.next = cur.next;
  16. }
  17. }
  18. pre.next = null;
  19. return head;
  20. }