題目:題目:給定鍊錶的頭指標和乙個結點指標,在o(1)時間刪除該結點。
思路:通常情況下,如果我們要刪除單鏈表的乙個節點,我們需要遍歷鍊錶找到這個節點的前乙個節點,然後執行刪除操作,時間複雜度為o(n).
我們試著換一種思路,事實上,我們可以從給定的結點得到它的下乙個結點。這個時候我們實際刪除的是它的下乙個結點,由於我們已經得到實際刪除的結點的前面乙個結點,因此完全是可以實現的。當然,在刪除之前,我們需要需要把給定的結點的下乙個結點的資料拷貝到給定的結點中。此時,時間複雜度為o(1)。
struct listnode ;
void deletenode(listnode* plisthead, listnode* ptobedeleted)
else
pnode->next =
null;
delete ptobedeleted;
ptobedeleted =
null;
}}
上面的**基於兩個假設:(1)給定的結點的確在鍊錶中;(2)給定的要刪除的結點不是鍊錶的頭結點。 在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 時間刪除鍊錶結點
並不是一定需要得到被刪除的結點的前乙個結點,可以將被刪除結點的後乙個結點的內容複製到被刪除結點,然後將後乙個結點刪除。鍊錶只有乙個結點,刪除頭結點 也是尾結點 else if plisthead ptobedeleted 要刪除的結點是尾結點 上面的解法有乙個假設 要刪除的結點的確在鍊錶中。需要o ...