传递列表头部时,"在简单链表的末尾插入元素"的实现中的问题是什么?
void insert (int x, cel *ini) {
cel *tmp = ini;
while (tmp != NULL)
tmp = tmp->prox;
cel *new = malloc(sizeof(cel));
new->value = x;
tmp->prox = new;
new->prox = NULL;
}
应该可以:
void insert (int x, cel *ini) {
cel *tmp = ini;cel *left;
while (tmp != NULL)
{
left = temp;
tmp = tmp->prox;
}
cel *new =(cel*) malloc(sizeof(cel));
new->value = x;
left->prox = new;
new->prox = NULL;
}
检查tmp
为空,然后添加tmp->prox=new
。但问题是,当前的温度是NULL。您需要从temp的前一个节点指向新节点。
将while循环中的条件替换为:
while(tmp->prox!=NULL)
它将工作得很好,因为你必须到达当前链表的最后一个节点,该节点指向NULL。
但是您需要添加以下条件来检查ini是否为NULL,为此,在循环之前添加以下:
if(ini==NULL)
{
cel *new = malloc(sizeof(cel));
new->value = x;
new->prox = NULL;
ini=new;
}
你的程序正在做的是到达NULL(你的程序的tmp是NULL)