劍指offer 18 刪除鍊錶的節點

2021-10-03 01:51:04 字數 1219 閱讀 7495

描述:給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。

返回刪除後的鍊錶的頭節點。

示例:

輸入: head = [4,5,1,9], val = 5

輸出: [4,1,9]

解釋: 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.

常規思路:定義乙個暫時變數用來刪除節點,注意若要刪除a節點,則需使用a前乙個節點來刪除a,這種方法時間複雜度是o(n),因為最壞情況下要遍歷整個鍊錶才能找到待刪除元素。空間複雜度是o(1),僅需要使用乙個額外的節點temp

/**

* definition for singly-linked list.

* function listnode(val)

*//**

* @param head

* @param val

* @return

*/var deletenode = function(head, val) else temp = temp.next

}return head

};

leetcode版本與原題給出的listnode不同,原版本listnode定義

/**

* @param head

* @param todelete

* @return

*/var deletenode = function(head, todelete) {};

原書上的待刪除節點是listnode指標型別,可以思考o(1)時間複雜度的做法:

todelete.val = todelete.next.val

todelete.next = todelete.next.next

//可以直接刪除todelete節點(前提是todelete節點不是最後乙個節點)

如果todelete是最後乙個節點,那麼就退化為常規解法,**如下:

var head = function(todelete, head) else 

temp.next = null

return head}}

時間複雜度

劍指offer18 刪除鍊錶節點

1.考慮輸入空鍊錶和乙個節點鍊錶 2.如果頭節點不重複,直接遞迴查詢重複 3.雙指標,進行判斷兩個節點是不是相等 coding utf 8 class listnode def init self,x self.val x self.next none class solution def dele...

劍指offer 18 刪除鍊錶的結點

typedef int datatype typedef struct listnode listnode 建立結點 static listnode createnode datatype data 鍊錶初始化 void listinit listnode ppfirst 鍊錶銷毀 void lis...

劍指offer 18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...