劍指offer 刪除鍊錶中重複的結點

2021-10-19 13:30:01 字數 1047 閱讀 8001

題目

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

知識點

鍊錶思路

感覺這道題看起來很簡單,但是實際上處處都是坑啊。。。

解法一、

當鍊表為空或者只有乙個結點時直接返回;

接下來我先處理頭結點,當頭結點存在重複的結點時一直迴圈,直到為空或頭結點為不重複的結點;(注意處理,小心空指標異常)

再以此時的頭結點為pre指向的位置,此時headval = pre.next.val,而nextnode = pre.next.next;

迴圈判斷headval是否==nextnode.val,是則nextnode一直向後遍歷,直到不是則退出迴圈,使pre.next = nextnode;

例如:1->2->2->2->3 最開始pre.val = 1, headval = 2, nextnode = 第二個2,進入迴圈;迴圈退出後此時nextnode = 值為3的結點;此時1->3,pre.val=1;

pre為空或pre.next為空則退出迴圈,最後返回phead。

解法二、兩次遍歷,第一次用hashmap存每個結點的值出現個數,第二次刪除;**略。

**

/*

public class listnode }*/

public

class

solution

if(phead!=null&&phead.next!=null) headval = phead.val;

else

break;}

listnode pre = phead;

while

(pre!=null&&pre.next!=null)

else pre = pre.next;

}return phead;

}}

劍指offer 鍊錶 刪除鍊錶中的重複節點

題目在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路分析 思路一 使用linkedlist儲存不重複節點,重構鍊錶 分析評價 這個方法是乙個比較直接且容易想到的方法,使用時只要注意一些情況...

劍指offer 刪除鍊錶中重複的結點(鍊錶)

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 class solution listnode ans newlistnode 1 ans next phead listnode link a...

劍指Offer 鍊錶 刪除鍊錶中重複的結點

題目 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。注意該鍊錶為排序鍊錶,重複的節點不保留哦!public class listnode 1 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...