資料結構 單鏈表 在O 1 時間刪除鍊錶結點

2021-07-15 14:31:54 字數 908 閱讀 3444

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

思路:如果按常規思路來

刪除乙個結點需要找到該結點的前乙個結點,將這個節點的_next指向被刪除節點的 _next,找到這個該結點的前乙個結點就需要遍歷鍊錶,此時就不是o(1)時間。

刪除結點我們不需要找到前乙個結點,我們可以很方便的找到後乙個節點,我們可以把後乙個節點的值給前乙個結點,刪除後乙個結點。

但是,如果我們刪除的是尾結點呢?我們必須遍歷鍊錶了。

還需要考慮如果鍊錶只有乙個節點的問題。刪除結點之後,需要把煉表頭結點置為空。

時間複雜度:1. o(n) 2. [(n-1 )*o(1)+o(n)]/n

但是是否要判斷鍊錶是否有這一刪除的結點呢?

判斷了時間複雜度又要加o(n)。

**如下:

template

struct listnode

};template

class list

bool pushback();

bool dellistnode(listnode* node)//在o(1)時間刪除鍊錶節點 head mid tail

if(_head == node)//head

else

}else

if(node->_next ==

null)//tail

delete node;

prev->_next =

null;

return

true;

}else

//mid

else

return

true;}}

private:

listnode* _head;

};

在O 1 時間刪除單鏈表結點

出處 題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。原文採用的是c c 這裡採用c 節點定義如下 public class node 指標域 public nodenext publicnode publicnode t item 要實現的deletenode方法定...

在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 思路 在單向鍊錶中刪除乙個結點,最常用的做...