在O 1 時間刪除鍊錶結點

2021-09-11 00:00:54 字數 463 閱讀 2402

題目:

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

思路:一般的想法是從頭開始遍歷,直到找到要刪除的節點p的前乙個節點temp,然後讓temp->next指向p->next即可

這種思路時間複雜度是o(n)的

我們分情況考慮,如果要刪除的節點p不是尾部節點,我們可以讓p拷貝p->next節點的資訊,然後刪除p->next節點即可,這種時間複雜度是o(1)的,如果p是尾部節點,那麼還是要從頭遍歷。

注意delete節點之後,要把節點置為nullptr

struct listnode

;void deletenode(listnode** head, listnode* p)

else if (*head == p)//只有乙個節點或刪除頭結點

else//鍊錶中有多個節點,刪除尾節點

}

在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 時間刪除鍊錶結點

題目 題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。思路 通常情況下,如果我們要刪除單鏈表的乙個節點,我們需要遍歷鍊錶找到這個節點的前乙個節點,然後執行刪除操作,時間複雜度為o n 我們試著換一種思路,事實上,我們可以從給定的結點得到它的下乙個結點。這個時候我們實際刪除的是它的下乙...