我正在尝试创建一个在链表末尾添加的函数,但我遇到了分割错误。 我真的不知道我的代码出了什么问题。我首先检查列表是否为空。如果它不为空,那么我首先使用 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;
}
}
当head
NULL
时,您正在执行以下操作:
if (!head) {
head->next = tmp;
}
但是没有NULL
指针next
,因此这会调用未定义的行为。
相反,您应该执行以下操作:
if (!head) {
head = tmp;
}
这是一个演示。
此外,请避免使用NULL
宏,而改用nullptr
。
head->next = tmp;
不起作用,因为当您输入该代码分支时head
是一个nullptr
。它需要
head = tmp;
作为编码准则,
- 你不需要
struct Node* next
.它可以只是Node* next
. - 你不需要
typedef Node Node
.
struct Node {
int data;
Node *next;
};
// No need of this
// typedef Node Node;