劍指 面試題18 1 刪除鍊錶中的節點

2021-10-04 08:27:52 字數 1862 閱讀 3052

題目

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

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

題目保證鍊錶中節點的值互不相同

若使用 c 或 c++ 語言,你不需要 free 或 delete 被刪除的節點

思路:

劍指提供的o(n

)o(n)

o(n)

思路(測試用例保證待刪除節點一定在鍊錶中):

(1)如果待刪除節點不是尾節點,則將其後面乙個節點複製成該節點,再刪除其next節點;

(2)如果待刪除節點是尾節點,則遍歷到待刪除節點的前乙個節點,然後執行正常的刪除節點;

(3)如果只有乙個節點,則head==null。

c++

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(wait_delete-

>next!=

nullptr

)//待刪除的不是尾節點

else

if(head==wait_delete)

//需要刪除的是頭節點,且整個鍊錶只有乙個節點

else

//需要刪除的是尾節點

return head;}}

;

python

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

deletenode

(self, head: listnode, val:

int)

-> listnode:

wait_delete = head

while wait_delete!=

none

:#找到待刪除節點

if wait_delete.val == val:

break

wait_delete = wait_delete.

next

if wait_delete.

next

!=none

: pnext = wait_delete.

next

wait_delete.val = pnext.val

wait_delete.

next

= pnext.

next

pnext =

none

elif head == wait_delete:

head =

none

wait_delete=

none

else

: pnode = head

while pnode.

next

!=wait_delete:

#找到待刪除節點的前乙個節點

pnode = pnode.

next

pnode.

next

=none

wait_delete =

none

return head

《劍指offer》練習 面試題18 刪除鍊錶的節點

題目 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路一 非遞迴 1.首先新增乙個頭節點,以方便碰到第乙個,第二個節點就相同的情況 2.設定 pre last 指標,pre指標指向當前確定...

劍指offer 面試題57 刪除鍊錶中重複的結點

題目 在乙個排序的鍊錶中,如何刪除重複的結點?例如1 2 3 3 4 4 5刪除重複結點後為1 2 5。思路 題目看似很簡單,但要寫出無bug魯棒性好的 其實有一定難度。首先重複結點可能出現在頭結點,如果要修改頭結點的指標,那麼傳入的引數應該為指標的指標,即指向頭結點指標的指標。對於重複結點,處理的...

《劍指Offer》面試題57 刪除鍊錶中重複的節點

題目 在乙個排序的鍊錶中,如何刪除重複的節點?樣例輸入 1 2 3 3 4 4 5 樣例輸出 1 2 5 1.新建乙個頭節點,以防第乙個節點被刪除。2.儲存當前節點上個節點,迴圈遍歷整個鍊錶,如果當前節點的值與下乙個節點的值相等,則將當前節點的值與next.next節點的值比較,直到不相等或者nul...