[LeetCode] #83 Remove Duplicates from Sorted List 解題

題目連結

題型解說

這是一題難度為簡單的題目

需要設計一個方法,此方法會傳入一個已經排序好的 Linked List head,當中每一個元素都有一個數字

將這個所有的重複數字移除後回傳

範例:

head = 1->1->2,則回傳 1->2
head = 1->1->2->3->3,則回傳 1->2->3

解題思路

這一題沒有太多好講的部分,就是利用迴圈或是遞迴的方式來把重複的數字過濾掉

如果是利用迴圈的方式,得要建立兩個參考物件

一個用來參考到最後一個元素,另一個用來歷遍所有元素

另一個遞迴解法是其他人提交的內容,寫遞迴挺燒腦的,所以就直接拿其他人的來用

很巧妙,只有三行

程式碼

Java

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return head;
        }
        
        ListNode temp1 = head;
        ListNode temp2 = head;
        
        while (temp2 != null) {
            // 如果下一個元素的數字不等於目前的數字,就加入到要回傳的結果中
            // 簡單說就是切斷原本的鏈接順序,這樣就不用另外產生新的物件了
            if (temp2.next != null && temp2.next.val != temp2.val) {
                temp1.next = temp2.next;
                temp1 = temp1.next;
            }
            temp2 = temp2.next;
        }
        
        temp1.next = null; // 因為是使用原本的物件,所以需要把剩餘不需要的部分斷開
        return head;
    }
}
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null) return head;
        head.next = deleteDuplicates(head.next);
        return head.val == head.next.val ? head.next : head;
    }
}