在O 1 時間刪除鍊錶結點

2021-07-05 11:04:20 字數 954 閱讀 6819

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

struct listnode;

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

方法:要刪除結點i,先把i的下乙個結點j的內容複製到i,然後把i的指標指向結點j的下乙個結點。此時再刪除結點j,其效果剛好是把結點i給刪除了。如果要刪除的結點位於鍊錶的尾部,那麼它就沒有下乙個結點,則需要從鍊錶的頭結點開始,順序遍歷得到該結點的前序結點,並完成刪除操作。如果鍊錶中只有乙個結點,則在刪除結點後,還需要把鍊錶的頭結點設定為null。(下面**沒有考慮到結點不在鍊錶中的情況)

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

if (ptobedeleted->m_pnext !=

null)

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

else

pnode->m_pnext =

null;

delete ptobedeleted;

ptobedeleted =

null;}}

時間複雜度分析:對n-1個非尾結點而言,可以在o(1)時把下乙個結點的記憶體複製覆蓋要刪除的結點,並刪除下乙個結點;對於尾結點而言,時間複雜度是o(n)。因此總的平均時間複雜度是[(n - 1) * o(1) + o(n)]/n,結果還是o(1)。

測試用例

在O 1 時間刪除鍊錶結點

題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead,listnode ptobedeleted 刪除結點的操作我們經常碰到,比如乙個鍊錶a b ...

在O 1 時間刪除鍊錶結點

問題描述 給定單向鍊錶的頭指標和乙個結點指標 定義乙個函式在o 1 時間刪除鍊錶結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead listnode ptobedeleted 思路 在單向鍊錶中刪除乙個結點,最常用的做...

在O 1 時間刪除鍊錶結點

題目 題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。思路 通常情況下,如果我們要刪除單鏈表的乙個節點,我們需要遍歷鍊錶找到這個節點的前乙個節點,然後執行刪除操作,時間複雜度為o n 我們試著換一種思路,事實上,我們可以從給定的結點得到它的下乙個結點。這個時候我們實際刪除的是它的下乙...