我试图创建一个链表插入函数,该函数接受一个列表(或更准确地说是一个指向它的指针),然后将值插入到列表的末尾。
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;
更新列表以指向结束节点,并且每次我运行 insert(...) 时,列表的头部都会更新为指向末尾(如果我没有错的话)。这有什么办法?