LeetCode203 移除鍊錶元素(鍊錶)

2021-10-07 13:28:34 字數 1983 閱讀 8933

刪除鍊錶中等於給定值 val 的所有節點。

不增加虛擬頭結點時:

/**

* 移除鍊錶元素

* @param head

* @param val

* @return

*/public listnode removeelements

(listnode head,

int val)

//刪除完第乙個元素的val值等於val的情況後,需要確保此時head不為空

if(head == null)

//刪除不是第乙個元素的val值等於val的情況

listnode curnode = head;

while

(curnode.next !=null)

else

}return head;

}

增加虛擬頭結點:dummyhead

/**

* 移除鍊錶元素:增加乙個虛擬頭節點

* 找到要刪除節點的前乙個節點,然後將要刪除的節點跨過去

* @param head

* @param val

* @return

*/public listnode removeelements2

(listnode head,

int val)

else

} listnode retnode = dummyhead.next;

dummyhead.next = null;

return retnode;

}

遞迴:

/**

* 鍊錶天然的遞迴性

* * 遞迴:本質上,將原來的問題,轉化為更小的同一問題,例如:陣列求和

* 注意遞迴函式的「巨集觀」語意,遞迴函式就是乙個函式,完成乙個功能

* * 遞迴函式的呼叫,本質就是函式的呼叫,只不過呼叫的函式是自己而已

* * 遞迴呼叫是有代價的:函式呼叫+系統棧空間

* * 近乎和鍊錶相關的所有操作,都可以使用遞迴的形式完成

* 對鍊錶的增刪改查都可通過遞迴實現

* * 此外:雙鏈表 class node

* 迴圈鍊錶 class node

* 陣列鍊錶 class node

* * 鍊錶具有天然的遞迴性

* @param head

* @param val

* @return

*/public listnode removeelements3

(listnode head,

int val)

head.next =

removeelements3

(head.next,val)

;return head.val == val? head.next : head;

}

陣列求和:

public

static

intsum

(int

arr)

/** * 計算arr[l,....,n)這個區間內所有數字的和

* @param arr

* @param l

* @return

*/private

static

intsum

(int

arr ,

int l)

//把原問題轉化成更小的問題

return arr[l]

+sum

(arr,l+1)

;}

LeetCode 203 移除鍊錶元素

刪除鍊錶中等於給定值val的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6輸出 1 2 3 4 5建立初始節點dummy和cur,cur等於dummy。再建立節點point等於head。然後point不為空時進入迴圈,如果point val等於val,那麼將point向後移動一步 如果...

LeetCode 203 移除鍊錶元素

題目 刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 筆記解析 刷題就 是個踩坑的過程,閃一下子卻很舒服,因為會有成長 坑點 1 注意有多個要刪除的節點鏈結 例子 1,2,6,6,6,3,4 解法 將三種類別分開討論,只要是cu...

leetcode 203 移除鍊錶元素

解題思路 方法一 1.新建乙個節點,遍歷鍊錶,如果值相等,連線到下乙個節點,原指標下移.public static listnode removeelements listnode head,int val listnode heada head listnode cur new listnode ...