用函数将指针指向链表的最后一个节点

时间:2015-10-13 11:39:49

标签: c pointers

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
.
.
.


}

尝试使用不同的函数返回指针,但它没有..

4 个答案:

答案 0 :(得分:1)

我希望您熟悉按价值呼叫和参考呼叫的概念 将current1作为参数传递给函数时,将在本地创建另一个变量,该变量将具有与current1相同的指针值。然后你正在修改本地指针,这将不会反映在调用函数中。

答案 1 :(得分:0)

使用此功能,您不会对current1进行更改,因为您传递了值,会创建它的副本并对其进行更改。在这种情况下,您应该return指针从函数中分配给current1

第二种方法是将&current1作为参数传递给函数,以便在该地址的值处进行更改,并在调用函数中保持更改。

答案 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(&current1);

答案 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是你的链接列表的最后一个节点。