面試題18 刪除鍊錶的節點

2021-10-09 03:36:57 字數 897 閱讀 1322

題目一:在o(1)時間內刪除鍊錶節點。

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

struct listnode

;void

deletenode

(listnode*

* plisthead,lis***oe* ptobedeleted)

;

把下乙個節點的內容複製到需要刪除的節點上覆蓋原有的內容,再把下乙個節點刪除。

當要刪除的節點位於鍊錶的尾部,我們仍然需要從鍊錶的頭節點開始,順序遍歷得到該節點的前序節點,並完成刪除操作。

如果鍊錶中只有乙個節點,而我們又要刪除鍊錶的頭節點,那麼,此時我們在刪除節點之後,還需要把鍊錶的頭節點設定為nullptr。

void

deletenode

(listnode*

* plisthead,lis***oe* ptobedeleted)

//鍊錶只有乙個節點,刪除頭節點

elseif(

*plisthead==ptobedeleted)

//鍊錶中有多個節點,刪除尾節點

else

}

題目二:刪除鍊錶中重複的節點

void

deleteduplication

(listnode*

* phead)

else

if(pprenode==

nullptr

)*phead=pnext;

else

pprenode-

>m_pnext=pnext;

pnode=pnext;}}

}

面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點指標,定義乙個函式刪除該節點。思路 使用o 1 的方法來解決,將要刪除的的節點用下乙個節點來覆蓋就相當於是刪除了原節點。但有兩種特殊情況需要考慮,但鍊錶只有頭節點,即鍊錶只有乙個節點。二刪除的節點是尾節點,只用從頭for一遍 class listnode pub...

面試題18 刪除鍊錶的節點

題目描述 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例...

面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...