我在C ++中编写一个函数,将“int”类型的“数据”添加到链表的末尾。
void insert_back()
{
int no;
node *temp;
cout<<"\nEnter the number"<<"\n";
cin>>no;
temp = head;
if(temp != NULL)
{
while(temp != NULL)
temp = temp->next;
}
temp->next = (node*)malloc(sizeof(node));
temp = temp->next;
temp->data = no;
temp->next = NULL;
}
然而,在行,temp-&gt; next =(node *)malloc(sizeof(node)),我得到访问冲突错误(分段错误)。我没有发现任何根本错误。你能否就这个问题赐教我?
答案 0 :(得分:1)
如果要获取列表的最后一个节点,只需检查 next 成员是否为null,因为最后一个节点的 next 成员为null。
在您的代码中,您检查 temp 是否为null,而不是 temp-&gt; next 。
while(temp != NULL)
temp = temp->next;
将在循环结束时将temp设为null。
此外,您还应该考虑头部为空的条件。
void insert_back()
{
int no;
node *temp;
cout<<"\nEnter the number"<<"\n";
cin>>no;
temp = head;
if(temp != NULL)
{
while(temp->next != NULL)
temp = temp->next;
temp->next = (node*)malloc(sizeof(node));
temp = temp->next;
temp->data = no;
temp->next = NULL;
}else{
head = (node*)malloc(sizeof(node));
head->data = no;
head->next = NULL;
}
}
答案 1 :(得分:0)
在该行执行之前,temp
将为空。然后你取消引用它。
答案 2 :(得分:0)
您所引用的温度不存在,温度为NULL。若要更正此问题,请使用temp-> next!= NULL代替在while循环条件下使用temp!= NULL。
while(temp->next!=NULL)
{
temp = temp->next;
}
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = no;
new_node->next = NULL;
temp->next = new_node;
答案 3 :(得分:-1)
while(temp != NULL)
temp = temp->next;
上面的代码将您带到列表中的最后一个节点。因此,您可以将节点添加到temp
本身而不是temp->next
。
temp = (node*)malloc(sizeof(node));
现在最后一个节点的子节点应为NULL。
temp->next = NULL;