leetcode題解-82. Remove Duplicates from Sorted List II

題意:本題是83題(Remove Duplicates from Sorted List)的拓展,這次重複的元素一個都不保留。

例子:
給定鏈表 1->2->3->3->4->4->5, 返回鏈表 1->2->5.
給定鏈表 1->1->1->2->3, 返回鏈表 2->3.

思路:道理還是和83題一樣,只是現在要把前驅指針指向上一個不重複的元素中,如果找到不重複元素,則把前驅指針指向該元素,否則刪除此元素。算法只需要一遍掃描,時間複雜度是O(n),空間只需要幾個輔助指針,是O(1)。代碼如下

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null) return null;
        ListNode fakeHead = new ListNode(0); 
        fakeHead.next = head;
        ListNode left = fakeHead;
        ListNode right = head;
        while(right != null){
            while(right.next != null && right.val == right.next.val){
                right = right.next;
            }
            if(left.next == right){
                left = right;
            }else{
                left.next = right.next;
            }
            right = right.next;
        }
        return fakeHead.next;
    }
}
發佈了119 篇原創文章 · 獲贊 149 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章