我试图做一个简单的程序,在链接列表的末尾添加一个节点:
/*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没有声明,当它实际上在开头被宣布为正确时。我在这里缺少什么?
答案 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;
}