(注意:由於本次**中有較為詳細的題目描述與解題分析,此處就不在重複說明)
#includeusing namespace std;
#include#include/
//題目
一、在o(1)時間內刪除鍊錶節點
// 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o(1)
// 時間內刪除該節點。鍊錶節點與函式的定義如下
/struct listnode;
listnode* create(int x)
void deletenode(listnode** head,listnode* tobedeleted)
listnode* cur;
//對於鍊錶中節點的刪除,最早想到的也許是先進行查詢,如果查詢到
//再進行刪除操作,但是這種方法的時間複雜度為o(n),不滿足題中要
//求。故此,我們可以進行刪除待刪除節點的下乙個節點,將待刪除結
//點的值進行修改,就達到了刪除指定元素的目的。但是 此種方法需要
//考慮帶刪除元素是否在鍊錶中,如果需要進行判斷,呢麼時間複雜度
//不可以 達到指定要求,所有此處我們因該確定待刪除元素一定在鍊錶
//中,才能進行以下操作。
//分三種情況進行分析
//1.待刪除節點為首結點
if(tobedeleted == *head)
//2.待刪除節點為中間節點
else if(tobedeleted->next != null)
//待刪除節點為尾節點
else
cur ->next = null;
free(tobedeleted);
}return;
}
void test1()
deletenode(&head,x1);
printf("\n**********刪除中間節點***********************\n");
cur = head;
i = 0;
while( cur != null)
deletenode(&head,head);
printf("\n**********刪除頭結點***********************\n");
cur = head;
i = 0;
while( cur != null)
deletenode(&head,x3);
printf("\n**********刪除尾節點***********************\n");
面試題 在O 1 時間複雜度刪除鍊錶節點
給定乙個單鏈表中的表頭和乙個等待被刪除的節點 非表頭或表尾 請在在o 1 時間複雜度刪除該鍊錶節點。並在刪除該節點後,返回表頭。樣例 給定 1 2 3 4,和節點 3,返回 1 2 4。372 delete node in the middle of singly linked list 刪除鍊錶節...
O 1 時間複雜度刪除鍊錶元素
package lineartable 鍊錶節點類 class node 鍊錶類 public class linktable 增加節點 public void addnode node node end.next node 刪除節點 時間複雜度為o 1 無需遍歷鍊錶元素 public void d...
刪除鍊錶結點要求O 1 時間複雜度
一,題目 給定鍊錶的頭指標和乙個結點指標,在 o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted 二,分析 這是一道廣為流傳的 google 面試...