一、題目描述
給定一個已排序的鏈表的頭head,刪除所有重復的元素,使每個元素只出現一次。返回已排序的鏈表。
二、題目解析
由于給定的鏈表是排好序的,因此重復的元素在鏈表中出現的位置是連續的,這個很關鍵。
因此我們只需要對鏈表進行一次遍歷,就可以刪除重復的元素。
具體操作如下:
1、設置一個指針cur,指向鏈表的頭節點,從鏈表的頭節點開始訪問每一個節點。
2、開始不斷遍歷鏈表。
3、在訪問過程中,只要當前節點和當前節點的下一個節點有值,就不斷訪問下去
4、當前節點和當前節點的下一個節點有兩種關系。
5、當前節點和當前節點的下一個節點相同,此時要刪除重復元素, 由于鏈表已經是排序的,所以去重操作只需要跳過后面這個重復的節點就行。
6、當前節點和當前節點的下一個節點不相同,那么 cur 這個節點可以保留下來,繼續訪問后面的節點
三、參考代碼
// LeetCode 100題精講:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA //作者:程序員吳師兄 //https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/ classSolution{ publicListNodedeleteDuplicates(ListNodehead){ //從鏈表的頭節點開始訪問每一個節點 ListNodecur=head; //在訪問過程中,只要當前節點和當前節點的下一個節點有值,就不斷訪問下去 while(cur!=null&&cur.next!=null){ //當前節點和當前節點的下一個節點有兩種關系 //1、當前節點和當前節點的下一個節點相同,此時要刪除重復元素 //由于鏈表已經是排序的,所以去重操作只需要跳過后面這個重復的節點就行 if(cur.val==cur.next.val){ //執行這個操作之后,cur.next被跳過去了 cur.next=cur.next.next; //2、當前節點和當前節點的下一個節點不相同,那么cur這個節點可以保留下來,繼續訪問后面的節點 }else{ //繼續訪問后面的節點 cur=cur.next; } } //返回鏈表的頭節點就是結果 returnhead; } }
審核編輯:劉清
-
Val
+關注
關注
0文章
3瀏覽量
8319 -
Headset
+關注
關注
0文章
13瀏覽量
10412 -
null
+關注
關注
0文章
19瀏覽量
3974
原文標題:LeetCode 83:刪除排序鏈表中的重復元素
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
講解鏈表的刪除、修改以及插入
![講解<b class='flag-5'>鏈表</b>的<b class='flag-5'>刪除</b>、修改以及插入](https://file.elecfans.com/web2/M00/8B/17/pYYBAGPBBueABg9YAAGZxy_aoSg287.jpg)
python去除列表重復元素的簡單操作
玩轉C語言鏈表-鏈表各類操作詳解
Labview如何實現相鄰重復元素合并成一個
如何進行單鏈表的查找、插入與刪除的詳細介紹包括了算法和源程序
![如何進行單<b class='flag-5'>鏈表</b>的查找、插入與<b class='flag-5'>刪除</b>的詳細介紹包括了算法和源程序](https://file.elecfans.com/web1/M00/57/CD/pIYBAFtMUZ6ADQEfAABhfIGxRPI097.png)
LeetCode 26:刪除有序數組中的重復項
鏈表的基礎知識
![<b class='flag-5'>鏈表</b>的基礎知識](https://file.elecfans.com/web2/M00/89/5B/pYYBAGO2kSWAK0PkAADn7tiCES0633.jpg)
評論