有序链表删除重复节点

有序链表删除重复节点

问题

这个题目说的是,给你一个单链表,这个单链表节点上的数字是有序的。对于出现多次的数字,你要把它们全删掉,留下只出现一次的节点,最后返回处理后的单链表。

比如说,给你的有序单链表是:

1 -> 1 -> 2 -> 4

1 出现了多次,删掉它后,你要返回的链表是:

2 -> 4

代码

public class AlgoCasts {

  public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
      val = x;
    }
  }

  // Time: O(n), Space: O(1)
  public ListNode removeDuplicatesInSortedList(ListNode head) {
    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode prev = dummy, cur = prev.next;
    while (cur != null) {
      while (cur.next != null && cur.val == cur.next.val) cur = cur.next;
      // update prev
      if (prev.next != cur) prev.next = cur.next;
      else prev = prev.next;
      // update cur
      cur = prev.next;
    }
    return dummy.next;
  }

}

 上一篇
寻找天际线 寻找天际线
寻找天际线问题 这个题目说的是,给你一组矩形表示的楼房,它们的底边在同一水平线上,并且楼房之间可以相邻,也可以重叠。你要找到这组楼房的轮廓线或者叫天际线,并返回这个轮廓线的关键点。 代码 public class AlgoCasts {
2018-12-09
下一篇 
实现 LRU 缓存 实现 LRU 缓存
实现 LRU 缓存问题 这个题目说的是,你要实现一个 LRU 缓存,提供 get 和 put 两个操作,并且要求两个操作的时间复杂度都是 O(1)。另外为了简单起见,在这个题目中,key 和 value 都是整数值,并且 value 只为正
2018-12-09
  目录