为什么我在链表中插入代码时没有得到任何输出?
Why am I not getting any output, for my code on insertion in linked list?
我试图通过在末尾插入节点来创建一个单链表,尽管没有错误,但我无法打印我的链表。请帮我调试我的代码。
我在 codechef 上尝试了在线编译器,它显示 SIGSEGV 运行时错误。这是什么意思?
struct node
{
int data;
struct node *next;
};
void insert(struct node *root,int data)
{
struct node *temp=new(struct node);
if(root==NULL)
{
temp->data=data;
temp->next=NULL;
}
root->next=temp;
temp->data=data;
temp->next=NULL;
}
void print(struct node *root)
{
struct node *temp;
temp=root;
while(temp!=NULL)
{
cout<<temp->data;
temp=temp->next;
}
}
int main()
{
struct node *root=NULL;
insert(root,1);
insert(root,2);
insert(root,3);
insert(root,4);
print(root);
return 0;
}
请帮我调试代码.
好的,让我们试试干运行。
假设您的列表是空的,并且您正在插入第一项。所以 root
等于 NULL
我们称 insert
.
1) 第一件事
struct node *temp=new(struct node);
您分配了一个新节点,并设置 temp
等于它,目前一切顺利。
2) 下一件事
if(root==NULL)
正如序言中所解释的那样,所以我们输入 if 语句
3) 下一件事
temp->data=data;
temp->next=NULL;
执行 if 主体中的这些语句并初始化新分配的对象。目前还不清楚为什么你只想在 root == NULL
时这样做,我想你会想要始终初始化新分配的节点。但无论如何,到目前为止没有错误。
4) 下一件事
root->next=temp;
现在是错误。问问自己,此时 root
的值是多少?我们开始时是 NULL
,此后有什么变化吗?答案当然是否定的,所以你是在取消引用 NULL 指针。这解释了错误。
您需要能够查看您编写的代码并了解它的实际作用。像我上面那样干燥运行你的代码的能力是一项非常有价值的技能。
不幸的是,您的代码确实不太接近正确。所以我认为最好的办法是查看一些工作代码,看看它是如何运行的,然后重新开始。
我试图通过在末尾插入节点来创建一个单链表,尽管没有错误,但我无法打印我的链表。请帮我调试我的代码。
我在 codechef 上尝试了在线编译器,它显示 SIGSEGV 运行时错误。这是什么意思?
struct node
{
int data;
struct node *next;
};
void insert(struct node *root,int data)
{
struct node *temp=new(struct node);
if(root==NULL)
{
temp->data=data;
temp->next=NULL;
}
root->next=temp;
temp->data=data;
temp->next=NULL;
}
void print(struct node *root)
{
struct node *temp;
temp=root;
while(temp!=NULL)
{
cout<<temp->data;
temp=temp->next;
}
}
int main()
{
struct node *root=NULL;
insert(root,1);
insert(root,2);
insert(root,3);
insert(root,4);
print(root);
return 0;
}
请帮我调试代码.
好的,让我们试试干运行。
假设您的列表是空的,并且您正在插入第一项。所以 root
等于 NULL
我们称 insert
.
1) 第一件事
struct node *temp=new(struct node);
您分配了一个新节点,并设置 temp
等于它,目前一切顺利。
2) 下一件事
if(root==NULL)
正如序言中所解释的那样,所以我们输入 if 语句
3) 下一件事
temp->data=data;
temp->next=NULL;
执行 if 主体中的这些语句并初始化新分配的对象。目前还不清楚为什么你只想在 root == NULL
时这样做,我想你会想要始终初始化新分配的节点。但无论如何,到目前为止没有错误。
4) 下一件事
root->next=temp;
现在是错误。问问自己,此时 root
的值是多少?我们开始时是 NULL
,此后有什么变化吗?答案当然是否定的,所以你是在取消引用 NULL 指针。这解释了错误。
您需要能够查看您编写的代码并了解它的实际作用。像我上面那样干燥运行你的代码的能力是一项非常有价值的技能。
不幸的是,您的代码确实不太接近正确。所以我认为最好的办法是查看一些工作代码,看看它是如何运行的,然后重新开始。