gpt4 book ai didi

c - 在C中的链表的末尾插入节点

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:24 25 4
gpt4 key购买 nike

我正在编写将节点插入链表末尾的代码,但它根本不起作用。它为我提供了与以前相同的链表,但没有附加任何节点。

结果

the old list is :
9 8 7 6 5 4 3 2 1 0
the new list is :
9 8 7 6 5 4 3 2 1 0

代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//make a new type structure called node
typedef struct nodes{
int n;
struct nodes* next;
}node;
//assigning the first node of the linked list
node* head=NULL;
//append function
void append(int number){
node* tail=malloc(sizeof(node));
if(tail==NULL){
printf("unable to allocate");
exit(1);
}
tail->n=number;
tail->next=NULL;
if(head->next==NULL){
tail->next=head;
printf("added successfully");
}
else{
for(node* current=head;current->next==NULL;current=current->next){
current->next=tail;
printf("Added successfully");
break;
}
}
}
//main function
int main(int argc,char* argv[]){
//checking that the commmand is correct
if(argc!=2){
printf("Please type ./append and then type the number you want to add to the list");
}
//accept numbers in second argument
int newnumber=atoi(argv[1]);
//make the list
for(int i=0;i<10;i++){
node* newnode=malloc(sizeof(node));
//checking
if(new==NULL){
exit(1);
}
newnode->n=i;
newnode->next=head;
head=newnode;
}
//printing the old list
printf("the old list is :\n");
for(node* conductor=head;conductor!=NULL;conductor=conductor->next){
printf("%i ",conductor->n);
}
//append the number given to the start of the linked list
append(newnumber);
//printing the new list
printf("\nthe new list is :\n");
for(node* conductor=head;conductor!=NULL;conductor=conductor->next){
printf("%i ",conductor->n);
}
printf("\n");
return 0;
}

因此该功能似乎完全没有影响。我看不出错误在哪里。

最佳答案

node* tail=malloc(sizeof(node));

您创建了一个名为 tail 的新节点*。它还没有链接到任何东西。

首先,如评论中所述,如果列表为空,您的代码可能会取消引用 NULL 指针。例如,您可以在开头添加以下检查:

if(head==NULL) {
head=tail;
printf("Added successfully\n");
return;
}

现在让我们看看您的代码:

if(head->next==NULL){
tail->next=head;
printf("added successfully");
}

这里你分配了tail->next而不是head->next,所以你的尾部仍然不在列表中,这是一个错误。

else{
for(node* current=head;current->next==NULL;current=current->next){
current->next=tail;
printf("Added successfully");
break;
}
}

这里你的循环条件是错误的。对于初学者来说,== 可能应该是 !=。现在您的循环根本没有执行。

然后你还需要把那个循环体从循环中取出:

else {
node* current=head;
while (current->next!=NULL)
current=current->next;
current->next=tail;
printf("Added successfully");
}

但实际上这些都是非常简单的错误,您应该能够通过仔细观察来发现它们。

关于c - 在C中的链表的末尾插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com