在O 1 時間刪除鍊錶結點

2021-06-27 15:41:11 字數 1151 閱讀 2307

題目:給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1

)時間刪除該結點。

鍊錶結點與函式的定義如下:

struct

listnode

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

刪除結點的操作我們經常碰到,比如乙個鍊錶a->b->c->d->e->f->g。如果我們要刪除結點e,那麼我們只需要讓結點d的指標指向結點f即可,但是我們現在只給出煉表頭結點的指標以及結點e的指標,而又是單項鍊表,不能在o(1)時間內得到被刪除結點前面的那乙個結點的指標,所以我們原先的方法是不能在o(1)時間內刪除結點e的。

那麼既然我們不能獲得被刪除結點的前乙個結點的指標,我們就需要轉變思路來考慮是否能夠用過被刪除結點後乙個結點的指標來解決方法。因此被刪除結點e的後乙個結點指標是很容易得到的,也就是e->m_pnext。

#include#include

#include

using

namespace

std;

//鍊錶結構

struct

listnode;//

建立乙個鍊錶結點

listnode* createlistnode(int

value)

//遍歷鍊錶中的所有結點

void printlist(listnode*phead)

cout

<

}void connectlistnode(listnode* pcurrent,listnode* pnext)//

連線兩個結點

else

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

else

if(*plisthead==ptobedeleted)//

如果鍊錶只有乙個結點

else

//如果鍊錶有多個結點,且刪除最後乙個結點,那麼只能遍歷鍊錶

}void

main()

輸出結果:

1 2 3 4 5 6 7

1 2 4 5 6 7

xwdreamer

出處:

在O 1 時間刪除鍊錶結點

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

在O 1 時間刪除鍊錶結點

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

在O 1 時間刪除鍊錶結點

並不是一定需要得到被刪除的結點的前乙個結點,可以將被刪除結點的後乙個結點的內容複製到被刪除結點,然後將後乙個結點刪除。鍊錶只有乙個結點,刪除頭結點 也是尾結點 else if plisthead ptobedeleted 要刪除的結點是尾結點 上面的解法有乙個假設 要刪除的結點的確在鍊錶中。需要o ...