# Remove Duplicates from Sorted List II

### 描述​

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,

Given 1->2->3->3->4->4->5, return 1->2->5.

Given 1->1->1->2->3, return 2->3.

### 递归版​

// Remove Duplicates from Sorted List II// 递归版，时间复杂度O(n)，空间复杂度O(1)class Solution {    public ListNode deleteDuplicates(ListNode head) {        if (head ==null || head.next == null) return head;        ListNode slow = head;        ListNode fast = head.next;        if (slow.val == fast.val) {            while (fast != null && slow.val == fast.val) {                fast = fast.next;            }            return deleteDuplicates(fast);        } else {            slow.next = deleteDuplicates(slow.next);            return slow;        }    }};

### 迭代版​

// Remove Duplicates from Sorted List II// 迭代版，时间复杂度O(n)，空间复杂度O(1)public class Solution {    public ListNode deleteDuplicates(ListNode head) {        if (head == null) return head;        ListNode dummy = new ListNode(Integer.MAX_VALUE); // 头结点        dummy.next = head;        ListNode prev = dummy, cur = head;        while (cur != null) {            boolean duplicated = false;            while (cur.next != null && cur.val == cur.next.val) {                duplicated = true;                cur = cur.next;            }            if (duplicated) { // 删除重复的最后一个元素                cur = cur.next;                continue;            }            prev.next = cur;            prev = prev.next;            cur = cur.next;        }        prev.next = cur;        return dummy.next;    }}