首页 > 解决方案 > 调试链表指针代码:分段错误

问题描述

所以下面的代码:

/*
 * For your reference:
 *
 * SinglyLinkedListNode {
 *     int data;
 *     SinglyLinkedListNode* next;
 * };
 *
 */
SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {
  SinglyLinkedListNode* temp = head;
  while (temp != NULL) {
    temp = temp->next;
  }
  SinglyLinkedListNode* temp1;
  temp1->data = data;
  temp1->next = NULL;
  temp->next = temp1;
  return temp;
}

所以,基本上我想在链表“头”的末尾添加“数据”并返回更新的列表。那么错在哪里呢?

编辑:好的,我得到了第一个错误。但是即使我在循环条件中将 temp!=NULL 替换为 temp->next!=NULL 仍然存在此错误

标签: c++pointerslinked-listappendsingly-linked-list

解决方案


您必须为节点分配内存。记得清理分配的内存。每次打电话给new你,你都需要一个电话delete。因此我更喜欢智能指针。

在您的循环temp包含NULL. 您不能取消引用空指针。

SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {
    SinglyLinkedListNode* temp1 = new SinglyLinkedListNode;
    temp1->data = data;
    temp1->next = nullptr;
    if (!head) {
        head = temp1;
        return head;
    }
    SinglyLinkedListNode* temp = head;
    while(temp->next){
        temp = temp->next;
    }
    temp->next = temp1;
    return temp;
}

推荐阅读