一、題目描述
給定一個已排序的鏈表的頭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,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論