下面是兩種根據節點地址刪除鏈表節點的實現方式:
void Delete(struct Node * a,struct Node * tmp)
{
struct Node * t = a;
while(t->next != NULL)
{
if(t->next == tmp)
{
t->next = t->next->next;
free(tmp);
break;
}
t = t->next;
}
}
這種正確void Delete(struct Node * a,struct Node * tmp)
{
struct Node * t = a->next;
while(t != NULL)
{
if(t == tmp)
{
t = t->next;
free(tmp);
break;
}
t = t->next;
}
}
這種錯誤
這兩種開起來 相似,其實操作起來,如果不是對指針和指針變量特別熟悉的話,很難發現有什麼問題
第一種自己對比下面分析一下就知道了。
看看第二種;
如果 節點2爲tmp 要刪除的節點