給定乙個單鏈表中的表頭和乙個等待被刪除的節點(非表頭或表尾)。請在在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...