在C++的链表末尾插入一个节点



我写了这段代码来在单链表的末尾插入节点。它编译时没有错误,但在执行时没有显示任何输出。我哪里做错了?

void insert_n(int x){
node* temp1 = new node();
temp1->data=x;
temp1->next=NULL;
node* temp2 = head;
while(temp2->next!=NULL){
temp2 = temp2->next;
}
temp2->next=temp1;
}
void print(){
node* temp = head;
while(temp!=NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
}
int main()
{
head = NULL;
insert_n(2);
insert_n(3);
insert_n(4);
insert_n(5);
print();
return 0;
}

它失败是因为列表为空时应该有一个特殊情况吗?

是的,你是对的。如果head == NULL则您的插入功能无法工作。 以下是您insert_n() function的更正:

void insert_n(int x) {
node* temp1 = new node();
temp1->data = x;
temp1->next = NULL;
if (head == NULL) {
head = temp1;
} else {
node* temp2 = head;
while (temp2->next != NULL) {
temp2 = temp2->next;
}
temp2->next = temp1;
}
}

下面是一个代码示例: 用于搜索和插入单向链表的 C 程序

您的head永远不会设置为任何定义的值,因此它在以下位置失败:

node* temp2 = head;
while(temp2->next!=NULL){

因为headNULL的,所以temp2也是NULL的,这会导致分段错误,当它试图访问next

试试这个:

#include <iostream>
using namespace std; // this was missing !!!
struct node {
int data;
struct node* next;
};
struct node *head;
void insert_n(int x) {
node* temp1 = new node();
temp1->data = x;
temp1->next = NULL;
node* temp2 = head;
while (temp2->next != NULL) {
temp2 = temp2->next;
}
temp2->next = temp1;
}
void print() {
node* temp = head;
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
}
int main()
{
head = new node(); // without this you get a crash !!!
insert_n(2);
insert_n(3);
insert_n(4);
insert_n(5);
print();
return 0;
}

相关内容

  • 没有找到相关文章

最新更新