繁体   English   中英

链表插入函数 - 通过指针传递列表

[英]linked list insert function - passing a list by pointer

我试图创建链接列表插入函数,它接受一个列表(或更正确的指向它的指针),然后将值插入列表的末尾。

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(...)时,列表的头部都会更新为指向结束(如果我没有错)。 这有什么办法?

您没有正确使用指针指针: while循环中的这一行

(*l) = (*l)->next;

应该

l = &((*l)->next);

如果以这种方式使用它,则根本不需要temp变量。

因为这是C而不是C ++,所以不能转换malloc

如果函数插入空列表,则只应更改* l,因为这是列表的第一个元素发生更改的唯一情况。 这可以通过在函数内部使用局部变量而不是* l来实现(初始化为* l)。

如果你不移动指针l,那么它仍然在列表的头部。 首先将l分配给temp,然后沿列表移动temp,但只保留指针l。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM