題目:給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在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 ...