1. 程式人生 > >【Leetcode】82. Remove Duplicates from Sorted List II

【Leetcode】82. Remove Duplicates from Sorted List II

have from tco number question 一個數 example blog 出現

Question:

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.

Tips: 跟83題比較,本題需要刪除所有的重復數字,即只要一個數字出現重復,那麽總第一個該數字開始都將被刪除。 思路:
①設置一個新的頭結點newHead,以及一個pre結點一個cur結點。將pre初始化為newHead,在pre之後找到第一個不重復的結點,並將其賦值給pre.next。 ②遞歸。找到第一個不重復的結點,將它的next結點遞歸。 代碼:
public ListNode deleteDuplicates1(ListNode head) {
        if (head == null || head.next == null)
            return head;
        ListNode newHead = new ListNode(-1);
        newHead.next 
= head; ListNode pre = newHead; ListNode cur = head; while (cur != null) { //找到第一個不重復的結點 while (cur.next != null && cur.val == cur.next.val) cur = cur.next; //當pre的next就是cur即兩者之間沒有重復數字,將pre指針後移即可。 if (pre.next == cur) { pre
= cur; } else //否則 跳過cur 將pre的next設置成cur的next pre.next = cur.next; cur = cur.next; } return newHead.next; }

②:

public ListNode deleteDuplicates(ListNode head) {
        if (head == null)
            return null;

        if (head.next != null && head.val == head.next.val) {
            while (head.next != null && head.val == head.next.val) {
                head = head.next;
            }
            return deleteDuplicates(head.next);
        } else {
            head.next = deleteDuplicates(head.next);
        }
        return head;
    }

【Leetcode】82. Remove Duplicates from Sorted List II