?在看數(shù)據(jù)結(jié)構(gòu)的鏈表一章時客叉,一直對于鏈表表頭這個知識點比較迷惑丘喻。
下面是鏈表的末尾添加一個節(jié)點的函數(shù)原型音羞,為什么第一個形參是這樣定義的?其中ListNode表示一個節(jié)點仓犬。
void AddToTail( ListNode** pHead, int value);
問題就是為什么傳遞一個鏈表的信息需要使用一個指向指針的變量?
第一個問題:問什么要使用一個指針來表示鏈表舍肠?
?鏈表示意圖
可以從反面來回答這個問題搀继,如果不使用指針來表示鏈表而直接使用結(jié)點表示會怎么樣?
在處理刪除第一個結(jié)點或者插入第一個結(jié)點時將很麻煩翠语,而使用指針則非常靈活叽躯,處理首結(jié)點和其他結(jié)點方法是相同的,不需要特殊處理肌括。
第二個問題:為什么需要使用指向指針的指針來傳遞參數(shù)点骑?
因為在函數(shù)過程中可能會更改表頭的地址指針,如果直接傳遞指針的話就是按值傳遞谍夭,只能改變指針指向的內(nèi)存值并不能改變指針本身黑滴,只有使用一個指向指針的指針來傳遞傳遞參數(shù)才能改變表頭的指針。
附錄:
指向指針的指針剛開始接觸是很難形象的想象出來紧索,所以我用代碼實驗了一下袁辈,以便幫助大家理解。
?代碼
?示意圖
?執(zhí)行結(jié)果