刪除鍊錶中等於給定值val的所有節點。
示例:
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
/**
* definition for singly-linked list.
* public class listnode
* }*/
此時分成分成了三種情況,第乙個就是如果第乙個結點就是要刪除的結點,而因為沒有頭結點,所以需要乙個乙個判斷第乙個結點在其刪除之後的情況,當第乙個結點不再是待刪除的結點的時候,此時可能鍊錶已經為null就不需要後續。如果在鍊錶中間有待刪除的結點,此時就是需要使用乙個結點prev作為待刪除結點的前面乙個結點。
class solution
//考慮到如果只有乙個結點後續就用討論直接返回null即head
if(head==null)
//此時建立乙個prev結點表示要待刪除結點的前乙個結點
//而且此時的prev肯定不會為null因為前面已經討論過了 當當前head為null的情況
listnode prev = head;
//能夠執行到此處,說明此事head肯定不是null,因此判斷迴圈條件為next是否為null
//單鏈表中要刪除乙個結點一定知道其前面乙個結點
while(prev.next!=null)else
}
return head;}}
就不需要在刪除的時候單獨考慮第乙個結點是否為空的情況,此時判斷起來就比較容易,因為建立的頭結點本身在指向的時候就是要刪除結點的前面的結點
class solution else
}//最後返回的是頭結點指向的第乙個結點
return dummynode.next;}}
首先需要將整個單鏈表看做為由其第乙個結點和其後續的結點構成的結構,那麼同理,其後續結點也是乙個遞迴的結構。
因為被刪除的結點之後構成了還是乙個鍊錶的形式。在進行遞迴的時候,構建乙個res結點用來接收刪除結點之後的部分,再判斷當前的結點中是否同樣為符合被刪除條件,符合就直接返回res,不符合就拼接起來返回head
class solution
//採用遞迴呼叫的方法來刪除
//將原來的鍊錶看做是乙個結點加上後面的部分,
//同時後面的部分也是由乙個結點和其後續節點構成
//因為被刪除的結點之後構成了還是乙個鍊錶的形式
//構建乙個res結點用來接收刪除結點之後的部分
listnode res= removeelements(head.next,val);
//因為已經判斷刪除掉了head的next後續的部分,此時再看看head結點是否符合被刪除的條件
//如果符合就直接返回刪除返回之後的res
上述的遞迴演算法還可以更加精簡一些
class solution
//採用遞迴呼叫的方法來刪除
//將原來的鍊錶看做是乙個結點加上後面的部分,
//同時後面的部分也是由乙個結點和其後續節點構成
//因為被刪除的結點之後構成了還是乙個鍊錶的形式
//構建乙個結點用來接收刪除結點之後的部分
head.next= removeelements(head.next,val);
return head.val==val?head.next:head;}}
LeetCode刷題筆記 203 移除鍊錶元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 sc遞迴寫的漂亮阿 在不能比較好掌握的地方要先腳踏實地,先實現,不要怕寫的 臭 在掌握的地方時候要想著更進一步 class solution head.next removeele...
Leetcode移除鍊錶元素
刪除鍊錶中等於給定值val的所有結點 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 此題很簡單。需要知道兩點。刪除頭結點 刪除非頭結點 class solution def removeelements self,head,val 先迴圈的處理頭結點刪除的問題 while ...
LeetCode解題 移除鍊錶元素
刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 definition for singly linked list.public class listnode class solution else 注意 遍歷完整個鍊錶之後,p...