LeetCode 刪除排序鍊錶中的重複元素

2021-10-03 04:33:03 字數 1420 閱讀 7425

這幾天刷了些鍊錶的題目,大家不要害怕鍊錶的指標出錯,只要仔細分析幾種會出現的情況,對每一種情況指標該如何移動搞清楚,就不會有問題。在解題的時候要利用雙指標,三指標甚至4指標同時移動操作,並且有的時候可以利用雙指標間距為k來反向遍歷。例如:利用一次遍歷刪除倒數第k個節點等等。

給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。

示例 1:

輸入: 1->1->2

輸出: 1->2

示例 2:

輸入: 1->1->2->3->3

輸出: 1->2->3

【思路】

leetcode上有兩題刪除重複數字,且是鍊錶結構。這題比較簡單,我們只需要用兩個指標遍歷一邊鍊錶即可,例如first和tmp,tmp所指內容和first比較,如果相等,將tmp節點刪除。不相等時,兩個指標同時向後移動,直到tmp為空。

/**

* definition for singly-linked list.

* struct listnode ;

*/struct listnode* deleteduplicates(struct listnode* head)

else

tmp=tmp->next;

}return head;

}

給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。

示例 1:

輸入: 1->2->3->3->4->4->5

輸出: 1->2->5

示例 2:

輸入: 1->1->1->2->3

輸出: 2->3

【思路】

和上一題不同的是,這一題只要是重複資料,全部刪除。依然可以按照上面的思路,重複數字刪除只剩下乙個,現在我們需要flag來記錄這個數字是否為重複數字,如果是的話,分情況討論刪除重複數字的最後乙個即可。並且此時需要記錄非重複鍊錶的最後乙個節點end。

/**

* definition for singly-linked list.

* struct listnode ;

*/struct listnode* deleteduplicates(struct listnode* head)

end->next=tmp->next;flag=0;}}

elseelse

flag=0;

}else

}tmp=tmp->next;

}return head;

}

leetcode(簡單) 刪除排序鍊錶中的重複元素

我覺得我還是要注重一下時間的複雜度,不然怎麼叫搞演算法。題目 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3思路解答 這個題是乙個已經排好序的鍊錶了,所以只需要挨個比較刪除就好了。不需要整個...

LeetCode 83 刪除排序鍊錶中的重複元素

給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。definition for singly linked list.struct listnode struct listnode deleteducurrent nodelicates struct listnode head 示例 1...

LeetCode 83 刪除排序鍊錶中的重複元素

題目描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 輸入 1 1 2 輸出 1 2輸入 1 1 2 3 3 輸出 1 2 3解題思路 直接判斷下個節點的val是否與當前節點相同,相同則刪除,不同則將向後移。ac definition for singly linked li...