日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不带头节点的链表有哪些缺点_14. 删除链表中重复的结点

發布時間:2024/9/27 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不带头节点的链表有哪些缺点_14. 删除链表中重复的结点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

刪除鏈表中重復的結點

題目描述

在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5

寫鏈表中我們知道對于單鏈表訪問最大的缺點就是只能單向,從前向后,所以我們刪除也是一樣,刪除當前就得知道當前的上一個節點,那么我們這里采用指針記錄的方式。

方法1(粗暴)

我們采用最容易想到的方法,不用考慮時間效率與空間效率問題,就直接用遍歷,用一個哈希表結構來記錄每個節點對應的值在節點中出現了幾次,統計完成后,然后通過哈希表中如果出現次數為大于等于2,再用兩個指針一個前一個后開始找對應的值就行了,如果后一個指針指向的節點的值為哈希表中出現次數大于等于2的數,那么前一個指針指向后一個指針的next然后刪除后一個指針所指向的節點,讓后一個指針重新指向前一個指針的next,就這樣就可以完成刪除。

雖然這個方法可以,但是時間復雜度為O(N), 空間復雜度為一個哈希表的結構,所以采用這種不是最佳選擇。

方法2(三指針法)

采用三個指針來進行遍歷,同時刪除重復的節點,因為是有序的鏈表,我們就可以確定,重復的元素肯定是在一塊鏈接,所以我們就可以,用三指針,我們這里就叫

pre、cur、nex 分別代表的是前中后三個指針,我們在考慮的情況中,如果頭節點開始就重復,我們就處理很起來多了一種情況就需要額外處理,所以我們添加一個頭節點,變成帶頭節點,保證了頭節點開始不會重復,那么我們就可以讓開頭是pre指向帶頭的節點,cur指向pre的next,nex指向cur的next。

接下來我們就可以看cur是否和nex相等,相等就讓nex繼續向下走,不相等然后再處理刪除,cur開始到nex中間節點都是要刪除的(包含cur指向,不包含nex指向)刪除,就用到了pre,刪除完成讓pre指向cur就可以了。

如果cur值與nex值不相等,那么就可以三個指針各自往前移動一個。

注:在實現時,自己添加一個頭結點,把頭結點鏈接到鏈表上,方便。

總結

以上是生活随笔為你收集整理的不带头节点的链表有哪些缺点_14. 删除链表中重复的结点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。