1 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
如果不用空的header節(jié)點(diǎn)的話,要修改頭節(jié)點(diǎn),函數(shù)需要傳入header的地址而不是header本身(header此處已經(jīng)是指針,也就是說要傳入指針的指針)。
比如,
LNode *h, *p;
/* 從第一個(gè)節(jié)點(diǎn)開始刪除 */
void del_front(Node** header)
{
...
}
p=(LNode*)malloc(sizeof(LNode));
p->data=e;
h=p;
del_front(&h);
在上面這個(gè)例子中,你刪除了老的頭結(jié)點(diǎn),那么新的頭結(jié)點(diǎn)地址也就變了,也就是說h的值也應(yīng)該跟著變。要改變指針的值,你只傳入指針h給函數(shù)的話是不能修改h的值的(這是值傳入),我們需要通過給函數(shù)傳入指向指針的指針才能修改h的值,因此這么做就比較麻煩。
如果是將頭結(jié)點(diǎn)作為特殊節(jié)點(diǎn)的話,我們即使從第一個(gè)節(jié)點(diǎn)開始刪除,我們只需要傳入頭結(jié)點(diǎn)h給刪除的函數(shù),然后這個(gè)函數(shù)修改h->next就能解決問題了。所以這么做,維護(hù)性應(yīng)該是要好些的。
添加回答
舉報(bào)