[LeetCode-JAVA] Remove Duplicates from Sorted List II 最佳化版

來源:互聯網
上載者:User

標籤:

題目:

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.

 

原始思路:儲存前一位的指標,這樣在重複的時候,可以直接用next指向新的位置,需要注意的是開始時候,需要進行額外的判斷是否有重複,才能形成錯位的指標。

原始代碼:

public class Solution {    public ListNode deleteDuplicates(ListNode head) {        ListNode req = head;        ListNode pre = head;                //判斷初始是否有重複        while(head != null){            head = head.next;   // 直到沒有重複,head位於pre的下一位            if(head != null && pre.val == head.val){                do{                    head = head.next;                }                while(head!=null && head.val == pre.val);                pre = head;                req = head;            }else break;            }        //過程中判斷,pre始終在head前一位            while(head != null){            head = head.next;            if(head!=null && pre.next.val == head.val){                do{                    head = head.next;                }                while(head!=null && head.val == pre.next.val);                pre.next = head;            }            else pre = pre.next;                    }                return req;    }}

 

 

修改思路:可以建立一個虛擬表頭,next指向head,這樣可以把原始代碼中初始部分的額外判斷最佳化掉,代碼十分簡潔。

修改後代碼:

 

public class Solution {    public ListNode deleteDuplicates(ListNode head) {        ListNode dunmy = new ListNode(Integer.MIN_VALUE);        dunmy.next = head;        ListNode pre = dunmy;        while(head != null){            head = head.next;            if(head!=null && pre.next.val == head.val){                do{                    head = head.next;                }                while(head!=null && head.val == pre.next.val);                pre.next = head;            }            else pre = pre.next;                    }                return dunmy.next;    }}

 

[LeetCode-JAVA] Remove Duplicates from Sorted List II 最佳化版

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.