题目描述:
給定一個已排序的Linked List,刪除所有重複的元素,使每個元素只出現一次。
解題思路:
這道題是一道實作題,主要考驗讀者是否熟悉 Linked List 的操作。由於這個 Linked List 是已經排序好的,我們可以從頭開始遍歷,逐個比較當前節點和下一個節點的值。如果它們相同,我們就跳過下一個節點,把它從鏈表中刪除,然後繼續比較剩下的節點。這樣,直到我們處理完所有的節點為止。最後,我們返回鏈表的頭節點 head
。這個方法可以有效地刪除所有重複的元素,確保每個元素只出現一次。
var deleteDuplicates = function(head) {
let current = head;
while (current && current.next) {
if (current.val === current.next.val) {
current.next = current.next.next;
} else {
current = current.next;
}
}
return head;
};
時間複雜度:
O(n)
,其中n
是鏈表中節點的數量。我們只需遍歷一次鏈表即可。
空間複雜度:O(1)
,只使用了常數級別的額外空間。
總結:
這道題目可以歸類為「Linked List」。Linked List 類型的題目在 LeetCode 中占有很大比例,隨著題目難度的增加,這類問題會變得越來越複雜。因此,建議讀者按照 LeetCode 的題目順序,從簡單的開始,一步一步來解答這些問題,逐步掌握 Linked List 的各種操作和應用。