1. 題目
描述
刪除給出鏈表中的重復元素(鏈表中元素從小到大有序),使鏈表中的所有元素都只出現一次 例如: 給出的鏈表為1→1→2,返回1→2. 給出的鏈表為1→1→2→3→3返回1→2→3.
數據范圍:鏈表長度滿足 0≤n≤1000 ,鏈表中任意節點的值滿足 ∣val∣≤100
進階:空間復雜度 O(1),時間復雜度 O(n)
示例1
輸入:
{1,1,2}
返回值:
{1,2}
示例2
輸入:
{}
返回值:
{}
2. 解題思路
本題是:刪除有序鏈表中重復的元素,即重復的元素需要保留一個,同時限定了鏈表是有序的(這樣只需要比較相鄰的元素值)。
這時可以通過一個操作指針變量cur就可以完成題目的要求。
假如有序鏈表如下圖所示:
步驟一:定義操作節點指針變量。
步驟二:循環刪除鏈表重復節點。
-
當前節點與下個節點值相同,刪除下一個節點
cur對應的節點值1與它的下一個節點值1相同,則刪除下一個節點(更改cur的指針域: cur.next = cur.next.next)。之后再將cur移動到下一個節點(2節點)便于后序的操作。
????????????????
-
節點值不相同,移動指針變量cur
cur指向節點2與下一個節點值3不相同,則將cur移動到一個節點(3節點)。
????????????????
如果cur對應的下一個節點為Null,就沒有必要再比較了(已經是空節點了),循環退出。
步驟三: 返回頭結點。
處理之后的鏈表頭結點與原鏈表頭結點相同,直接返回原鏈表頭節點即可。
如果文字描述的不太清楚,你可以參考視頻的詳細講解。
-
Python版本:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕
https://www.bilibili.com/cheese/play/ep1370402
-
Java版本:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1366846
-
Golang版本:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1364603
3. 編碼實現
核心偽代碼如下:
函數 deleteDuplicates(頭節點 head):如果 head 為空:返回 head// 1. 定義操作節點指針變量當前節點 cur ← head// 2. 循環刪除鏈表重復節點當 cur的下一個節點 不為空 時://2.1 當前節點與下個節點值相同,刪除下一個節點如果 cur的值 等于 cur.next的值:cur的下一個節點 ← cur.next的下一個節點//2.2 節點值不相同,才移動指針變量否則:cur ← cur.next// 3. 返回頭結點返回 head
具體完整代碼你可以參考下面視頻的詳細講解。
-
Python版本:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕
https://www.bilibili.com/cheese/play/ep1370402
-
Java版本:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1366846
-
Golang版本:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1364603
4.小結
刪除有序鏈表中重復的元素(重復的元素需要保留一個),可以通過以下步驟完成:(1)定義操作節點指針變量;(2)循環刪除鏈表重復節點;(3)返回頭結點。
《數據結構與算法》深度精講課程正式上線啦!七大核心算法模塊全解析:
? 鏈表 ? 二叉樹 ?二分查找、排序 ? 堆、棧、隊列 ?回溯算法 ? 哈希算法 ? 動態規劃
無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!
-
Python編碼實現:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕
https://www.bilibili.com/cheese/play/ep1509965
-
Java編碼實現:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1510007
-
Golang編碼實現:嗶哩嗶哩_bilibili
https://www.bilibili.com/cheese/play/ep1509945
對于鏈表的相關操作,我們總結了一套【可視化+圖解】方法,依據此方法來解決鏈表相關問題,鏈表操作變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。
今日佳句:春風得意馬蹄疾,一日看盡長安花。