面試題 在O 1 時間複雜度刪除鍊錶節點

2021-07-04 03:51:11 字數 917 閱讀 8280

給定乙個單鏈表中的表頭和乙個等待被刪除的節點(非表頭或表尾)。請在在o(1)時間複雜度刪除該鍊錶節點。並在刪除該節點後,返回表頭。

樣例 給定 1->2->3->4,和節點 3,返回 1->2->4。

(372) delete node in the middle of singly linked list

刪除鍊錶節點,最普通的方法就是遍歷鍊錶,複雜度為o(

n)。

如果我們把刪除節點的下乙個結點的值賦值給要刪除的結點,然後刪除這個結點,這相當於刪除了需要刪除的那個結點。因為我們很容易獲取到刪除節點的下乙個節點,所以複雜度只需要o(

1),注意題目要求非表頭或表尾。

比如樣例

1->2->3->4->null 刪除節點 3 。第一步將節點3的下乙個節點的值4賦值給當前節點。變成 1->2->4->4->null,然後將就 4 這個結點刪除,就達到目的了。 1->2->4->null

如果刪除的節點的是頭節點,把頭結點指向null。

如果刪除的節點的是尾節點,那只能從頭遍歷到頭節點的上乙個結點。

/**

* definition of listnode

* class listnode

* }*/class

solution

}};

void deletenode(listnode **head, listnode *node) 

else

if(*head == node) //刪除的節點是頭節點

else

//刪除的是尾節點

pnode->next =

null;

delete node;

node =

null;

}}

面試題 O 1 時間複雜度刪除鍊錶節點

注意 由於本次 中有較為詳細的題目描述與解題分析,此處就不在重複說明 includeusing namespace std include include 題目 一 在o 1 時間內刪除鍊錶節點 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點與函式的定義如下 s...

經典面試題 在O 1 時間刪除鍊錶結點

題目 給定鍊錶的頭指標和乙個結點指標。在o 1 時間刪除該結點。鍊錶結點的定義例如以下 struct listnode 函式的宣告例如以下 void deletenode listnode head,listnode node 思路 這是一道廣為流傳的google面試題,能有效考察我們的程式設計基本...

O 1 時間複雜度刪除鍊錶元素

package lineartable 鍊錶節點類 class node 鍊錶類 public class linktable 增加節點 public void addnode node node end.next node 刪除節點 時間複雜度為o 1 無需遍歷鍊錶元素 public void d...