【问题标题】:take pointer to last node of linked list with function使用函数获取指向链表最后一个节点的指针
【发布时间】:2015-10-13 11:39:48
【问题描述】:
void go_last(bn_ptr current)
{

   bn_ptr ptr=current;

   while(ptr->next!=NULL)
   {
    ptr=ptr->next;
   }

}

我有链表和“头”指针从头开始,我定义了新指针并用“头”均衡它,我只想将“当前”指针指向链表的最后一个节点,但我的函数不是工作

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


}

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

【问题讨论】:

  • 您是否遇到任何错误?还是你得到了意想不到的输出?
  • 给出你列表的初始化代码。
  • 没有错误,我尝试通过编写 printf("current1 :%d ",current1->number); 来查看函数是否有效
  • 恕我直言,您的函数运行良好(它会到达列表的最后一个节点)——您只是没有定义您对它的期望。因为简单的“去最后一个节点”显然不是你需要的。
  • 感谢您的帮助... – user3121023 我用您的回答试了一下,效果很好,我很感激您...

标签: c pointers


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用此函数,您无需更改 current1 ,当您传递值时,会创建它的副本并对其进行更改。在这种情况下,您应该 return 来自函数的指针并分配发给current1。

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

    【讨论】:

      【解决方案3】:

      要检查最后一个节点,您要么需要将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 作为引用传递来更改函数本身中的 current1

      void go_last(bn_ptr* current)
      {
      
      
      
         while((*current)->next!=NULL)
         {
          *current=(*current)->next;
         }
      
      }
      

      ..

      bn_ptr current1=head;
      go_last(&current1);
      

      【讨论】:

        【解决方案4】:
        bn_ptr go_last(bn_ptr current)
        {
           bn_ptr ptr=current;
        
           while(ptr->next!=NULL)
           {
            ptr=ptr->next;
           }
        
           return ptr;
        }
        

        然后在main中

        bn_ptr current1=head;
        last_node = go_last(current1);//not working
        

        现在 last_node 是你的链表的最后一个节点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-15
          • 1970-01-01
          • 2014-12-13
          • 2018-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多