void go_last(bn_ptr current)
{
bn_ptr ptr=current;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
}
我有链接列表和'head'指针从头部保持它,我定义了新的指针并用'head'来均衡它我只想把'当前'指针带到我的链表的最后一个节点但我的功能不是工作
struct binumber
{
int number;
struct binumber *next;
};
typedef struct binumber binumber;
typedef struct binumber *bn_ptr;
......
int main()
{
.
.
.
bn_ptr current1=head;
go_last(current1);//not working
.
.
.
}
尝试使用不同的函数返回指针,但它没有..
答案 0 :(得分:1)
我希望您熟悉按价值呼叫和参考呼叫的概念
将current1
作为参数传递给函数时,将在本地创建另一个变量,该变量将具有与current1
相同的指针值。然后你正在修改本地指针,这将不会反映在调用函数中。
答案 1 :(得分:0)
使用此功能,您不会对current1
进行更改,因为您传递了值,会创建它的副本并对其进行更改。在这种情况下,您应该return
指针从函数中分配给current1
。
第二种方法是将¤t1
作为参数传递给函数,以便在该地址的值处进行更改,并在调用函数中保持更改。
答案 2 :(得分:0)
要检查最后一个节点,您需要将current1
作为双指针传递,或者从函数返回最后一个节点指针。
选项1:从函数
返回最后一个节点bn_ptr go_last(bn_ptr current)
{
bn_ptr ptr=current;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
return ptr;
}
...
bn_ptr current1=head;
current1 = go_last(current1);
选项2:通过将其作为参考传递来更改函数本身的current1
void go_last(bn_ptr* current)
{
while((*current)->next!=NULL)
{
*current=(*current)->next;
}
}
...
bn_ptr current1=head;
go_last(¤t1);
答案 3 :(得分:0)
bn_ptr go_last(bn_ptr current)
{
bn_ptr ptr=current;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
return ptr;
}
然后在主
bn_ptr current1=head;
last_node = go_last(current1);//not working
现在last_node是你的链接列表的最后一个节点。