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

2022-08-10 08:09:13 字數 1108 閱讀 1528

刪除鍊錶中重複的結點

兩種方法:

法一:不太好

借助於hashmap,將每個結點均加入map中,key為結點值,value為boolean型別,為true表示加入了一次,false表示加入了兩次及以上,

在加入前判斷map中是否已存在結點的值,

若不存在,則加入(node.val, true)

若存在,則加入(node.val, false)

然後再次遍歷鍊錶,同時查詢map中的key值,若為true,則放入新結點中,否則忽略

public class solution else

node = node.next;

}for(hashmap.entryentry : map.entryset())

listnode head = new listnode(0);

node = head;

while(phead != null)

phead = phead.next;

}node.next = null;

node = head;

while(node != null)

return head.next;

}}

法二:採用

newhead,(新的頭結點,用來返回)

newnext(用來將新結點後面結點連線起來),

先將兩個結點均指向新的new listnode(0),

遍歷鍊錶的時候,判斷鍊錶的當前結點及下乙個結點的值,

若相等,則記錄下當前結點的值val,並且開始遍歷,知道當前結點值不為val時,出來,繼續判斷(不用記錄當前結點,因為要將重複的結點全部刪除)

若不相等,則newnext = 當前結點的值

最後一點需要注意的是,當最後乙個結點是不重複的時候,是沒法判斷的,所以newnext = phead即可(即是最後乙個節點是重複的,那麼在上面的迴圈中,已經將其遍歷過,現在phead指向null)

public class solution 

}else

}newnext.next = phead;

return newhead.next;

}}

劍指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 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...