为什么我在链表中​​插入代码时没有得到任何输出?

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 指针。这解释了错误。

您需要能够查看您编写的代码并了解它的实际作用。像我上面那样干燥运行你的代码的能力是一项非常有价值的技能。

不幸的是,您的代码确实不太接近正确。所以我认为最好的办法是查看一些工作代码,看看它是如何运行的,然后重新开始。