这是链表的 C++ 代码。在输入 ch=1 的值后,它会添加一个具有某个值的节点,但在输入一个值后,程序会意外关闭
This is C++ code for linked list. after putting value of ch=1 it will add a node with some value but after putting one value program shuts unexpectdly
#include <iostream>
using namespace std;
class Node{
public:
int data;
Node *next;
};
int main()
{
Node *head=NULL;
Node *temp;
Node *nodeToAdd;
int ch,val,flag=1;
while(flag){
cout<<"\n1.Add 2.Traverse 3.EXIT\n";
cin>>ch;
switch(ch){
case 1:
nodeToAdd=new Node();
cout<<"Enter value - ";
cin>>val;
cout<<endl;
nodeToAdd->data=val;
temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=nodeToAdd;
break;
case 2:
temp=head;
while(temp!=NULL){
cout<<temp->data;
temp=temp->next;
}
break;
case 3:
flag=0;
break;
}
}
return 0;
}
请告诉我我的错误,为什么程序在设置 ch=1 后意外终止。将 ch 1 的值放入后,它将一个输入作为值,然后意外终止。
这段代码
temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=nodeToAdd;
已经调用了未定义的行为,因为最初指针 head
可以是空指针并且在表达式 temp->next!=NULL
中取消引用空指针会产生未定义的行为。
另外你忘记设置添加节点的数据成员next
为nullptr
。
按以下方式更改标签 case 1:
下的代码段
case 1:
cout << "Enter value - ";
cin >> val;
cout << endl;
nodeToAdd = new Node { val, nullptr };
if ( head == nullptr )
{
head = nodeToAdd;
}
else
{
temp = head;
while ( temp->next ) temp = temp->next;
temp->next = nodeToAdd;
}
break;
做之前:
temp=head;
while(temp->next!=NULL){
您需要检查 head
是否为 NULL。喜欢
if (head == NULL)
{
// ... Do stuff to insert first element
}
else
{
// Add to end of list
temp=head;
while(temp->next!=NULL){
...
#include <iostream>
using namespace std;
class Node{
public:
int data;
Node *next;
};
int main()
{
Node *head=NULL;
Node *temp;
Node *nodeToAdd;
int ch,val,flag=1;
while(flag){
cout<<"\n1.Add 2.Traverse 3.EXIT\n";
cin>>ch;
switch(ch){
case 1:
nodeToAdd=new Node();
cout<<"Enter value - ";
cin>>val;
cout<<endl;
nodeToAdd->data=val;
temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=nodeToAdd;
break;
case 2:
temp=head;
while(temp!=NULL){
cout<<temp->data;
temp=temp->next;
}
break;
case 3:
flag=0;
break;
}
}
return 0;
}
请告诉我我的错误,为什么程序在设置 ch=1 后意外终止。将 ch 1 的值放入后,它将一个输入作为值,然后意外终止。
这段代码
temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
temp->next=nodeToAdd;
已经调用了未定义的行为,因为最初指针 head
可以是空指针并且在表达式 temp->next!=NULL
中取消引用空指针会产生未定义的行为。
另外你忘记设置添加节点的数据成员next
为nullptr
。
按以下方式更改标签 case 1:
下的代码段
case 1:
cout << "Enter value - ";
cin >> val;
cout << endl;
nodeToAdd = new Node { val, nullptr };
if ( head == nullptr )
{
head = nodeToAdd;
}
else
{
temp = head;
while ( temp->next ) temp = temp->next;
temp->next = nodeToAdd;
}
break;
做之前:
temp=head;
while(temp->next!=NULL){
您需要检查 head
是否为 NULL。喜欢
if (head == NULL)
{
// ... Do stuff to insert first element
}
else
{
// Add to end of list
temp=head;
while(temp->next!=NULL){
...