題目:給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在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 思路 在單向鍊錶中刪除乙個結點,最常用的做...