リスト(より正確にはリストへのポインタ)を取得し、リストの最後に値を挿入するリンクリスト挿入関数を作成しようとしています。
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);
}
上記のコードを実行した後の出力は13です。
(*l) = (*l)->next;
エンドノードを指すようにリストを更新し、insert(...)を実行するたびに、リストのヘッドが最後を指すように更新されます(間違っていない場合)。これを回避する方法は何ですか?