用O(1)時間,刪除乙個鍊錶節點(3)

2021-08-07 15:23:14 字數 1060 閱讀 3992

listcommon.h,listcommon.cpp依賴:

鍊錶基本操作的函式實現。(1)

有這樣乙個問題,給定乙個單向鍊錶的頭結點phead和要刪除的節點pdeleted,但是要求在o(1)時間完成。

可能先想到的就是從頭結點往前遍歷,找到要刪除的節點pdeleted,這樣就知道了它的前後節點,但是這樣的時間是o(n)。

這裡的思路是:

把pdeleted的下乙個節點pnode1的值賦給pdeleted,同時讓pdeleted指向pnode2,然後把pnode1刪掉,pdeleted就不刪了,這樣就不用從頭遍歷了。

其中有2個特殊情況,1)整個鍊錶只有乙個節點,2)要刪除的節點是尾節點,這兩種情況要特殊處理。

deletelistnode.cpp

#include #include "listcommon.h"

using namespace std;

void deletelistnode(listnode** phead, listnode* pdeleted)

cout << "before delete node:"

pnode->m_pnext = null;

delete pdeleted;

pdeleted =null; }

cout << "after delete node:"<

pc:~/algorithm$ g++ listcommon.cpp deletelistnode.cpp -o deletelistnode

pc:~/algorithm$ ./deletelistnode

before delete node:

print list begin ---12

345print list end

after delete node:

print list begin ---12

45print list end

O(1)時間刪除鍊錶節點

問題描述 給定單相鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間刪除該節點。這個比較簡單,做不做解釋,直接看參考 不過有一點就是要注意,還是要看刪除的節點型別,不能保證總是o 1 時間 void deletenode listnode phead,listnode ptobedelete 刪...

o 1 時間刪除鍊錶的節點

題目 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。include include list.h using namespace std void deletenode listnode phead,listnode pnode else if phead pnode ...

69 在O 1 時間刪除鍊錶節點

對於刪除鍊錶節點需要考慮的問題 鍊錶為空時?刪除頭節點時?刪除尾節點時?要在o 1 o 1 的時間複雜度內刪除節點,那只能採用特殊辦法了 對於頭節點,很容易完成,因為它沒有前驅 對於中間節點,只能是把待刪除節點改造成其後繼節點,然後刪除後繼節點了,這樣值是相等的,但是確實不是同乙個節點 對於尾節點,...