我試圖創建鏈接列表插入函數,該函數接受一個列表(或更正確的指向它的指針),然後將該值插入到列表的末尾。鏈接列表插入函數 - 通過指針傳遞列表
void ll_insert(struct ll **l, int n){
struct ll *temp=NULL;
while ((*l) != NULL){
temp= (*l);
(*l) = (*l)->next;
}
(*l)= (struct ll*)malloc(sizeof(struct ll));
(*l)->n=n;
(*l)->next=NULL;
if (temp) temp->next= (*l);
}
int main(void){
struct ll *l=NULL;
ll_insert(&l, 1);
printf("%d ", l->n);
ll_insert(&l, 1);
ll_insert(&l, 2);
ll_insert(&l, 3);
printf("%d ", l->n);
}
運行上述代碼之後的輸出是1 3.這並不奇怪,因爲
(*l) = (*l)->next;
更新列表,以指向到端節點,並且每次我運行刀片(。 ..)列表的頭更新指向結束(如果我沒有錯)。這是怎麼回事?
請您進一步解釋兩種情況之間的區別? – Smokie 2012-07-17 02:33:36
@Smokie第一個是將'next'指針本身賦值給'l'指向的指針;第二個是將一個指針**分配給**'next'給變量'l'本身。 – dasblinkenlight 2012-07-17 02:39:45