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

2021-08-21 15:46:52 字數 1454 閱讀 5052

(注意:由於本次**中有較為詳細的題目描述與解題分析,此處就不在重複說明)

#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 面試...