这是我在列表末尾添加一个元素的函数,但我暂时找不到修复循环的方法,你能给我一些提示/规则来使这个函数工作吗?
void insCoda(t_lista *l, TipoElemLista elem){
t_lista ultimo;
t_lista temp;
temp=(node *)malloc(sizeof(node));
temp->contenuto=elem;
temp->next= NULL;
if(*l==NULL)
{
*l=temp;
printf("Dentro if");
}else{
ultimo=*l;
while(ultimo->next!=NULL)
{
ultimo=ultimo->next;
ultimo->next=temp;
}
}
}
最佳答案
这彻底坏了:
ultimo=*l;
while(ultimo->next!=NULL)
{
ultimo=ultimo->next;
ultimo->next=temp;
}
在入口处,您将 ultimo
设置为(大概)列表的头部。然后你前进到下一个节点 (ultimo=ultimo->next
),并立即将该节点的 next
指针设置为你新分配的节点 ( ultimo->next=temp
).除了 oops,您的下一个操作是测试您刚刚设置的内容是否为 NULL
(事实并非如此,除非 malloc
失败)。所以你处理你的新节点,并将它的 next
设置为它自己。现在您处于无限循环中。如果你不进入循环(因为你的头是唯一的节点,所以循环条件会立即失败),你根本不会插入新节点(这很好,因为这将你从无限循环中拯救出来)。
提示:不要在循环内设置next
。虽然我没有测试过,但只需将集合移到循环外就可以了:
ultimo=*l;
while(ultimo->next!=NULL)
{
ultimo=ultimo->next;
}
ultimo->next=temp;
所以现在你遍历到最终节点,然后让你的新节点成为最终节点。
关于c - 在 C 列表上添加尾节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679894/