劍指Offer 18 刪除鍊錶的節點 01

2021-09-07 05:29:23 字數 2653 閱讀 3267

題目:給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o(1)時間內刪除該節點。

鍊錶節點定義如下:

class

listnode

(object):

def__init__

(self, val)

: self.val = val

self.

next

=none

例:

1 -> 2 -> 3 ->4 -> none

head = 1 del = 3

1 -> 2 -> 4

關鍵在於要求o(1)的時間,所以不可以從頭遍歷。這個題目在leetcode做過,當時還是想了很久。其實並沒有刪除了節點,而是刪除了節點的值,想到這一層,就能明白這個題目的解法。沒有刪除node的記憶體,而是將node中儲存的資料刪除了,因此只需要將node.next.val賦值給node.val,並刪除node.next即可。

注意,處理node.next = none的情況,不然會報錯none沒有val屬性。此時必須處理前一節點的next屬性,只能從頭遍歷。

注意,處理刪除的節點時頭節點,且鍊錶中只有這個節點的情況。python我不知道如何原地刪除頭節點…只能做返回none處理,其餘情況返回head。

時間複雜度:平均o(1)

空間複雜度:o(1)

class

listnode

(object):

def__init__

(self, val)

: self.val = val

self.

next

=none

defdelete_listnode

(head, delete_node)

:"""

:param head: head of nodelist

:param delete_node: node

:return: head

"""next_node = delete_node.

next

if next_node:

# not del end

delete_node.val, next_node.val = next_node.val, delete_node.val

delete_node.

next

= next_node.

next

elif head is

not delete_node:

# del end

while head.

next

isnot delete_node:

head = head.

next

head.

next

=none

else

:# delete head

head =

none

return head

請編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點,你將只被給定要求被刪除的節點。

現有乙個鍊錶 – head = [4,5,1,9],它可以表示為:

4 -> 5 -> 1 -> 9
示例 1:

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

輸出: [4,1,9]

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

示例 2:

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

輸出: [4,5,9]

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

說明:

鍊錶至少包含兩個節點。

鍊錶中所有節點的值都是唯一的。

給定的節點為非末尾節點並且一定是鍊錶中的乙個有效節點。

不要從你的函式中返回任何結果。

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

(object):

defdeletenode

(self, node)

:"""

:type node: listnode

:rtype: void do not return anything, modify node in-place instead.

"""node.val = node.

next

.val

node.

next

= node.

next

.next

劍指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 刪除鍊錶的節點

描述 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。示例 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.常規思路 定義乙個暫時變數用來刪除節點...