鏈表中刪除某節點(注意)

下面是兩種根據節點地址刪除鏈表節點的實現方式:

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 要刪除的節點

   







發佈了19 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章