c - 在 C 列表上添加尾节点

标签 c list tail

这是我在列表末尾添加一个元素的函数,但我暂时找不到修复循环的方法,你能给我一些提示/规则来使这个函数工作吗?

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/

相关文章:

c - C 变量无法解释的变化

c++ - 无法删除 C++ 中的列表元素

tail - 如何使用 Telegraf 跟踪远程日志文件

unix - unix 上的环形缓冲区日志文件

encoding - 如何通过管道 tail -f 到 iconv 命令?

c - 线程返回计算

c - 从堆栈中弹出,程序无限循环

c - 查找编译时宏下的函数/宏调用次数

python - 如何将 3D 数组转换为 python 中的 2D 数组列表?

python - 使用 For 循环更改字符串中的单词以列出项目