gpt4 book ai didi

c - C语言从另一个链表填充空链表

转载 作者:行者123 更新时间:2023-11-30 15:24:58 25 4
gpt4 key购买 nike

我有一个包含数据的完整链表,我想要的是用相同的数据但有一个条件填充另一个链表,所以假设这是链表:

char cl; 
int time;
int lng;

C 0 1

D 0 2

B 2 1

A 2 2

我想从这个列表复制到一个新的空列表,但前提是(时间>0),所以新列表将如下所示:

B 2 1

A 2 2

我已经尝试过这段代码,但它不起作用:

void insert(const node * n )// this where i put the pointer of the full node
{
node *head=n;
node *sec; // new node
sec=(node*)malloc(sizeof(node));

do{
if(head->time>0){
strcpy(sec->cl,head->cl);
sec->time= head->time;
sec->lng= head->lng;
head=head->next;
sec=sec->next;
}
else
head=head->next;
}while(head!=NULL);
print(sec) // this will print the new node
}

请帮帮我。谢谢

最佳答案

我结合了评论中的所有建议以及一些额外的修复。 这是生成的代码:

const node* insert(const node * head)
{
node *sec = NULL; // start of the new, second list
node *last = NULL; // points to the last inserted node

while(head!=NULL){
if(head->time > 0){
node* newsec=(node*)malloc(sizeof(node));
newsec->cl = head->cl;
newsec->time = head->time;
newsec->lng = head->lng;
newsec->next = NULL;
//Add the new node to the list:
if(last == NULL){ //This is the first element in the new list
sec = newsec;
}else{
last-> next = newsec;
}
last = newsec;
}
head=head->next;
}
print(sec); // this will print the new node
return sec;
}

你的错误:

  • 内存分配错误(您只分配了一次内存)
  • 不需要 strcpy(字符不需要字符串复制)
  • while 必须位于循环的开头(如果给定列表为空,您的代码将会失败)
  • 缺少分号
  • 新列表的连接错误
  • const 正确性错误(node *head=n; 中缺少 const)
  • 内部head -variable 不是必须的(而且参数命名 n 也不太理想。如果你将其命名为“start”/“head”/“begin”,注释就不是必需的)

另一个建议:为结构体使用大写名称,因为这样可以更轻松地区分类型和变量(应该是 Node ,而不是 node)

请注意,您可能想要删除 const从返回值类型。

关于c - C语言从另一个链表填充空链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28139689/

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