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 的時間複雜度內刪除節點,那只能採用特殊辦法了 對於頭節點,很容易完成,因為它沒有前驅 對於中間節點,只能是把待刪除節點改造成其後繼節點,然後刪除後繼節點了,這樣值是相等的,但是確實不是同乙個節點 對於尾節點,...