請撰寫一個函式,使其可以洗掉某個鏈表中給定的(非末尾)節點,傳入函式的唯一引數為 要被洗掉的節點 ,
示例 :輸入:head = [4,5,1,9], node = 5 輸出:[4,1,9]
解釋:給定你鏈表中值為 5 的第二個節點,那么在呼叫了你的函式之后,該鏈表應變為 4 -> 1 -> 9.
現有一個鏈表 – head = [4,5,1,9],它可以表示為:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list
洗掉鏈表中的節點
- ?鏈表
- 💹題目分析
- 💯代碼實作
?鏈表
鏈表是由多個元素組成的串列,鏈表中的元素儲存不連續,用next指標連接在一起,
🎄陣列:增刪非陣列元素需要移動元素
?鏈表:增刪非首尾元素不需要移動元素只需要更改next的指向即可
秘 JavaScript中沒有鏈表,但是可以用object來模擬鏈表
const a = { val: 'a' }
const b = { val: 'b' }
const c = { val: 'c' }
const d = { val: 'd' }
// a的next屬性指向b
a.next = b;
b.next = c;
c.next = d;
// 這個嵌套的object就相當于一個鏈表
遍歷鏈表
👉遍歷鏈表就是跟著鏈表從鏈表的頭元素(head)一直走到尾元素(但是不包含鏈表的頭節點,頭通常用來作為鏈表的接入點)
🤦?♂?還有一個問題,鏈表的尾元素指向一個null節點
// 宣告一個指標,指向a
let p = a
// 當p還有值得時候
while (p) {
console.log(p.val)
// 不斷得讓p指向下一個位置
p = p.next
}
插入鏈表
// 在鏈表中插入值
const f = { val: 'f' }
c.next = f
f.next = d
洗掉鏈表
// 洗掉值
c.next = d
💹題目分析
- 洗掉上一個節點的指標即可,但是無法獲取上一個節點的指標,因為鏈表中的節點只會指向下一個節點
- 怎么在不知道上一個節點指標的情況下還能洗掉呢? 可以將被洗掉的節點轉移到下一個節點
- 也就是將下一個節點洗掉,但是要在洗掉之前將下一個節點的值轉移到這個節點
💯代碼實作
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};
- 沒有回圈所以時間復雜度是O(1)
- 沒有陣列或者矩陣所以空間復雜度也是O(1)
下面是執行結果,大家有什么更好的方法歡迎指教👉🙋?♂?🙋?♀?

題目分析二:
如何讓自己在世界上消失,但又不死?
----------------------------------------------------------------------------------
將自己完全變成另一個人,再殺了那個人就行了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/290684.html
標籤:其他

