刪除鍊錶節點

2021-06-25 16:36:32 字數 1214 閱讀 2218

問題描述:

給出單鏈表頭指標以及要刪除節點的位址,要求寫**刪除這個節點,並且時間複雜度為o(1),如何實現?

分析:(1) 應變能力

(2) 對時間複雜度的理解

平常思路:

prev->next = temp->next;

free(temp);

但是該思路的時間複雜度為o(n)

解題:不能從phead開始找,入口在所要刪除的節點的位址

(1) 將temp後面的節點的資料拷貝到當前temp處,刪除最後乙個節點空間

(2) 最後乙個節點沒有下乙個節點時,只能採用遍歷的方法。

程式**如下:

#include #include typedef struct node

node;

//獲取鍊錶之前先插入

node * get_link(int length, int local, node **plocal)

if (local == length - i) //要刪除的節點位址

temp->next = phead;

phead = temp;

} return phead;

}void link_print(node *temp)

printf("\n");

}node * del_node(node* phead, node* local)

//(1) 最後乙個節點

if (local->next == null)

node * prev = phead;

while (prev != null && prev->next != null)

prev = prev->next;

} }else }

int main()

node* plocal = null;

phead = get_link(number,local,&plocal);

link_print(phead);

printf("刪除資料:%d\n",plocal->data);

phead = del_node(phead,plocal);

link_print(phead);

return 0;

}

鍊錶刪除節點

define crt secure no warnings include include typedef struct linknode lk,lk 有頭鍊錶的初始化 lk initlinknode 初始化頭結點 headnode num 1 頭結點不維護資料域,這行 可寫可不寫 headnode...

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...

單向鍊錶刪除節點

單向鍊錶刪除節點的乙個技巧,這個是在 程式設計之美 上面看到的,可以用來對付一些演算法題。有時候會遇到這種情況,單鏈表提供乙個指標,要求要刪除指標指向的節點。如下 考慮到釋放記憶體,還再需要乙個指標 我們具體一下,有這麼乙個單向鍊錶,這個鍊錶的節點比較簡單,資料域只有乙個整型 並且當前的指標 ite...