如何在链表末尾添加?



我正在尝试创建一个在链表末尾添加的函数,但我遇到了分割错误。 我真的不知道我的代码出了什么问题。我首先检查列表是否为空。如果它不为空,那么我首先使用 while 循环来执行此操作n找到列表的末尾,然后一旦该循环完成,我就会设置n->next = tmp;

struct Node {
int data;
struct Node *next;
};
typedef Node Node;
void add(Node* &head, int data) {
Node *tmp = new Node;
tmp->data = data;
tmp->next = NULL;
if (!head) {
head->next = tmp;
} else {
Node *n = head;
while (n->next) {
n= n->next;
}
n->next = tmp;
}
}
int main() {
Node *head = NULL;
add(head,1);
add(head,2);
Node *tmp = head;
while (tmp != NULL) {
cout << tmp->data;
tmp = tmp->next;
}
}

headNULL时,您正在执行以下操作:

if (!head) {
head->next = tmp;
}

但是没有NULL指针next,因此这会调用未定义的行为。

相反,您应该执行以下操作:

if (!head) {
head = tmp;
}

这是一个演示。

此外,请避免使用NULL宏,而改用nullptr

head->next = tmp;

不起作用,因为当您输入该代码分支时head是一个nullptr。它需要

head = tmp;

作为编码准则,

  1. 你不需要struct Node* next.它可以只是Node* next.
  2. 你不需要typedef Node Node.
struct Node {
int data;
Node *next;
};
// No need of this
// typedef Node Node;

相关内容

  • 没有找到相关文章

最新更新