在給定單鏈表的頭指標和乙個結點指標,定義乙個函式在o(1)時間刪除該結點。鍊錶結點與函式的定義如下:
struct listnode
;void deletenode(listnode** plisthead, listnode* ptobedeleted);
在單鏈表中刪除乙個結點,最常規的做法是,從鍊錶的頭結點開始,順序遍歷查詢要刪除的結點,並在鍊錶中刪除該結點。(從頭開始查詢,是因為需要得到將被刪除結點的前面乙個結點,然後修改該接地的next指標)
題目要求在o(n)時間刪除,遍歷的話時間複雜度就成為o(1)了,不符合條件。
新思路:
要刪除結點i,先把i的下乙個結點j的內容複製到i,然後把i的指標修改指向結點j的下乙個結點,此時再刪除結點j,其效果剛好是把結點i給刪除了。
注意:如果刪除的結點位於鍊錶的尾部,則需要從煉表頭結點開始遍歷得到該結點的前序結點,並完成操作。如果鍊錶只有乙個結點,則刪除該結點後,需要把鍊錶的頭結點設定為null。
void deletenode(listnode** plisthead, listnode* ptobedeleted)
//要刪除的結點是為結點,並且是頭結點
else
if (*plisthead == ptobedeleted)
//鍊錶中有多個結點,刪除的是尾結點
else
pnext->m_pnext =
null;
delete ptobedeleted;
ptobedeleted =
null;
}}
在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 我們試著換一種思路,事實上,我們可以從給定的結點得到它的下乙個結點。這個時候我們實際刪除的是它的下乙...