在O(1)時間內刪除鍊錶結點(特殊情況)

2021-09-10 17:43:52 字數 781 閱讀 4007

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

struct listnode

;void deletenode(listnode** plisthead,listnode* ptobedeleted);

分析:此題目若按照從前向後遍歷尋找要刪除的結點則需要o(n)的時間複雜度。

但是假設知道要刪除的結點存在於鍊錶中,則思路可以轉變為:

1)要刪除的結點的後面的結點值賦值給要刪除的結點,再把要刪除結點的的下乙個結點刪除。

3)要刪除的結點位於頭結點,直接刪除,並賦null即可。

附圖:

參考:

void deletenode(listnode** plisthead, listnode* ptobedeleted)

//鍊錶只有乙個結點,刪除頭結點(也是尾結點)

else if(*plisthead == ptobedeleted)

//要刪除的結點是尾結點

else

pnode->m_pnext = null;

delete ptobedeleted;

ptobedeleted = null;}}

參考: 劍

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

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

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

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

程式設計題目 在 O(1)時間內刪除鍊錶結點

60.在 o 1 時間內刪除鍊錶結點 鍊錶 演算法 題目 給定鍊錶的頭指標和乙個結點指標,在 o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted ...