演算法系列 在O 1 時間內刪除鍊錶結點

2021-08-07 15:22:09 字數 772 閱讀 5778

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

分為三種情況:

1.刪除的是頭結點

直接返回 head.next

2.刪除的是尾結點

這種情況下,只能從頭開始遍歷,找到尾結點的前驅

3.刪除的是中間結點

如果是中間節點,比如說 4->5->6->7->8 刪除6對應的結點,

我們可以先將7賦給6,然後再將next指標指向8,那麼就可以在o(1) 時間內刪除這個結點。

核心思路**如下所示:

tobedeleted.val= tobedeleted.next.val;

tobedeleted.next = tobedeleted.next.next;

public

class solution

// 如果刪除的是頭結點,直接返回頭結點的下乙個結點

if (head == tobedeleted)

// 下面的情況鍊錶至少有兩個結點

// 在多個節點的情況下,如果刪除的是最後乙個元素

if (tobedeleted.next == null)

// 刪除待結點

tmp.next = null;

}// 在多個節點的情況下,如果刪除的是某個中間結點

else

// 返回刪除節點後的煉表頭結點

return head;

}}

在O 1 時間內刪除鍊錶節點

題目 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 的時間刪除該節點。struct listnode void deletenode listnode plisthead,listnode ptobedeleted 演算法思路 一般我們是從頭節點開始遍歷,知道找到要刪除的節點的前面乙個節...

在 O 1 時間內刪除鍊錶節點

解題思路 如果該節點不是尾節點,那麼可以直接將下乙個節點的值賦給該節點,然後令該節點指向下下個節點,再刪除下乙個節點,時間複雜度為 o 1 如果鍊錶只有乙個節點,那麼直接 否則,就需要先遍歷鍊錶,找到節點的前乙個節點,然後讓前乙個節點指向 null,時間複雜度為 o n 綜上,如果進行 n 次操作,...

在O 1 時間內刪除鍊錶節點

from acwing 28 time limit 1s memory limit 64mb problem description 給定單向鍊錶的乙個節點指標,定義乙個函式在o 1 時間刪除該結點。假設鍊錶一定存在,並且該節點一定不是尾節點。sample 輸入 鍊錶 1 4 6 8 刪掉節點 第2...