在 C 列表上添加尾节点
Adding tail node on a C list
这是我在列表末尾添加一个元素的函数,但我暂时找不到修复循环的方法,你能给我一些 tips/rules 让这个函数工作吗?
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
)。除了哎呀,你的下一个动作是测试你刚刚设置的东西是否是 NULL
(它不是,除非 malloc
失败)。所以你处理你的新节点,并将它的 next
设置为它自己。现在您处于无限循环中。如果你不进入循环(因为你的头是唯一的节点,所以循环条件立即失败),你根本不会插入新节点(这很好,因为这可以让你免于无限循环)。
提示:不要在循环内设置next
。虽然我没有测试过,但只需将集合移到循环外就可以了:
ultimo=*l;
while(ultimo->next!=NULL)
{
ultimo=ultimo->next;
}
ultimo->next=temp;
所以现在你遍历到最后一个节点,然后让你的新节点成为最后一个节点。
这是我在列表末尾添加一个元素的函数,但我暂时找不到修复循环的方法,你能给我一些 tips/rules 让这个函数工作吗?
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
)。除了哎呀,你的下一个动作是测试你刚刚设置的东西是否是 NULL
(它不是,除非 malloc
失败)。所以你处理你的新节点,并将它的 next
设置为它自己。现在您处于无限循环中。如果你不进入循环(因为你的头是唯一的节点,所以循环条件立即失败),你根本不会插入新节点(这很好,因为这可以让你免于无限循环)。
提示:不要在循环内设置next
。虽然我没有测试过,但只需将集合移到循环外就可以了:
ultimo=*l;
while(ultimo->next!=NULL)
{
ultimo=ultimo->next;
}
ultimo->next=temp;
所以现在你遍历到最后一个节点,然后让你的新节点成为最后一个节点。