0

我正在用 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->next = (node*)malloc(sizeof(node)) 行,我收到访问冲突错误(分段错误)。我没有发现任何根本上的错误。你能就这个问题告诉我吗?

4

5 回答 5

1

如果要获取列表的最后一个节点,只需检查下一个成员是否为空,因为最后一个节点的下一个成员为空。

在您的代码中,您检查temp是否为 null 而不是temp->next

while(temp != NULL)
    temp = temp->next;

当循环结束时,温度将为空。

此外,您还应该考虑头部为空的情况。

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;
    }

}
于 2013-08-18T03:08:22.923 回答
0

就在该行执行之前,temp将为空。然后你取消引用它。

于 2013-08-18T02:51:40.007 回答
0

您所指的 temp 不存在,temp 为 NULL。要更正此问题,请不要在 while 循环条件中使用 temp!=NULL,而是使用 temp->next!= 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;
于 2019-01-11T14:37:26.907 回答
0

如果有人遇到此问题,只需检查您是否为 List 类创建了 Default 构造函数。在那个默认构造函数中“Make your head = NULL”;

代码:

class List
{
public:
Node *head;
List()
 {
    head = NULL;
 }
}
于 2021-11-24T12:57:08.450 回答
-1
while(temp != NULL)
    temp = temp->next;

上面的代码将您带到列表中的最后一个节点。因此,您应该将节点添加到temp自身而不是temp->next.

temp = (node*)malloc(sizeof(node));

现在最后一个节点的孩子应该是 NULL。

temp->next = NULL;
于 2013-08-18T02:52:47.930 回答