在O 1 的時間內刪除鍊錶的指定結點

2021-09-12 10:00:25 字數 1154 閱讀 6230

題目:給定單項鍊表的頭指標和乙個結點指標,定義乙個函式在o(1)的時間刪除該結點,鍊錶的定義如下:

struct listnode;

函式定義:void deletenode(listnode** plisthead,listnode* ptobedelete);

如上圖所示,想要刪除乙個單鏈表的中的某個結點有兩種方式:

1、如上圖中的( b)所示:要刪除i結點,必須從頭掃瞄,掃到h(i的前乙個結點),然後讓其next值指向j(i的下乙個位置),然後就可以刪除i了。此方法的複雜度為o(n),因為要刪除某個結點必須找到其上乙個結點,故需要從頭遍歷。

2、如上圖中的(c)所示:要刪除i結點,可以先把i的下一節點的值賦給i結點,然後讓i的next值指向下一節點的下一結點,就相當於刪除i結點。(注意要儲存i->next的這個結點,然後再刪除),此演算法複雜度為o(1),但是必須要求此要刪除結點一定是鍊錶中的結點,且當要刪除的結點為最後乙個結點時,必須用第一種方法,順序遍歷後找到最後一結點的上一結點,然後刪除,但此方法的平均時間複雜度仍然為o(1).

故**如下:

注意:delete結點後一定要讓結點指向nullptr(每次都忘。。。)

1

//在o(1)的時間刪除鍊錶指定的結點

2struct

listnode;

6void deletenode(listnode** plisthead, listnode *ptobedelete)716

else

if (*plisthead != ptobedelete&&ptobedelete->next == nullptr)//

若是最後乙個節點

1723

delete

ptobedelete;

24 ptobedelete =nullptr;

25 p->next =nullptr;26}

27else

34 }

posted @

2016-04-25 00:36

general_up 閱讀(

...)

編輯收藏

O 1 時間內刪除指定鍊錶結點

題目 給定單鏈表頭指標和乙個結點指標,定義乙個函式在o 1 時間內刪除該結點。分析 對於上圖例項鍊錶 a 刪除指標p有兩種方式 於是,定位到思路2,但是思路2有兩個特例 刪除的是尾指標,需要遍歷找到前乙個指標 整個鍊錶就乙個結點 屬於刪尾指標,但沒法找到前面的指標,需要開小灶單獨處理 大體演算法思路...

O 1 時間內刪除指定鍊錶結點

題目 給定單鏈表頭指標和乙個結點指標,定義乙個函式在o 1 時間內刪除該結點。分析 對於上圖例項鍊錶 a 刪除指標p有兩種方式 於是,定位到思路2,但是思路2有兩個特例 刪除的是尾指標,需要遍歷找到前乙個指標 整個鍊錶就乙個結點 屬於刪尾指標,但沒法找到前面的指標,需要開小灶單獨處理 大體演算法思路...

在O 1 的時間內刪除指定的節點

給定乙個單鏈表和乙個指定節點,在o 1 內刪除指定節點。功能測試 中間節點 特殊值測試 頭結點,尾節點 struct listnode bool deletelistnode listnode head,listnode tobedelete else if tobedelete next null...