LeetCode題解-82-Remove Duplicates from Sorted List II

原題



解題思路

利用兩個節點node1與node2進行遍歷,node2是node1的後驅節點

if(node1.next.val == node2.next.val) 那麼此時存在重複的節點,
記錄下此值val,將node1之後的所有值爲val的節點刪除;
else
node1與node2前進1步;

通過一次遍歷可以將鏈表中重複的元素刪除完畢。


圖解



代碼

public class Solution82 {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null)
            return head;

        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode node1 = dummy;
        ListNode node2 = dummy.next;

        while (node2 != null && node2.next != null){
            if (node1.next.val == node2.next.val){
                int  val = node1.next.val;
                while (node1.next != null && node1.next.val == val){
                    node1.next = node2.next;
                    node2 = node1.next;
                }
            }
            else {
                node1 = node2;
                node2 = node1.next;
            }
        }

        return dummy.next;
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章