問題描述:給出單鏈表頭指標以及要刪除節點的位址,要求寫**刪除這個節點,並且時間複雜度為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...