为什么我看到下面的编译时错误?

时间:2016-10-25 16:39:46

标签: c linked-list

我试图做一个简单的程序,在链接列表的末尾添加一个节点:

/*Insert Node at the end of a linked list 
  head pointer input could be NULL as well for empty list

Node is defined as 
  struct Node
  {
     int data;
     struct Node *next;
  }
*/

Node* Insert(Node *head,int data)
{

    if(head){
         Node *curr_node=head;

        while(curr_node->next)
            curr_node=curr_node->next;
    }

    Node *new_node=(Node *)calloc(1,sizeof(Node));
    new_node->data=data;
    new_node->next=NULL;

    if(head)
            curr_node->next=new_node;
    else
            head=new_node;

    return head;
}

/* the main function calls it*/

编译时,我看到以下错误:

在函数'Node * Insert(Node *,int)'中: solution.cc:59:13:错误:'curr_node'未在此范围内声明              curr_node->接着= new_node

为什么说curr_node没有声明,当它实际上在开头被宣布为正确时。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

在函数定义中声明的变量具有仅扩展到最内层{}括号的范围。因此,您的变量curr_node在第一个if阻止后不再有效。

要解决此问题,请在if块之外声明您的变量:

Node* Insert(Node *head,int data)
{
    Node *curr_node = NULL;
    if(head){
        curr_node=head;

        while(curr_node->next)
            curr_node=curr_node->next;
    }