題目一:在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 輸入...