題型解說
這是一題難度為簡單的題目
需要設計一個方法,此方法會傳入一個已經排序好的 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;
}
}