gpt4 book ai didi

c - 我正在尝试对单个链表进行排序

转载 作者:行者123 更新时间:2023-11-30 17:08:59 24 4
gpt4 key购买 nike

我的代码运行错误!输入并排序列表中的某些数字后,对于某些数字,它不起作用并删除旧节点或不显示它们。无法弄清楚出了什么问题。

有时看起来工作正常,例如:我输入 4, 6, 7, 2,它确实显示在排序列表中。但输入3后列表中并没有显示3。

这是我的代码:

if(head == NULL)     
{
head = info;
last = info;
info->next = NULL;
}
else
{
if(info->number > last->number)
{
last->next = info;
last = info;
info->next = NULL;
}
else if (info->number < head->number )
{
info -> next = head;
head = info;
}

prev = head;

for(temp = head-> next ; temp!= NULL; temp = temp->next)
{
prev = prev->next;
if(info->number >temp->number)
{
temp->next = info;
}
else
{
temp-> prev = info;
info = prev;
}
}
}

最佳答案

if(head == NULL)     
{
head = info;
last = info;

info->next = NULL;
}
else
{
if(info->number >= last->number) <-- CHANGE:: > changed to >= to take care of same number (as earlier stored number) being entered
{
last->next = info;
last = info;
info->next = NULL;
return; <-- CHANGE:return added here, no need to proceed further
}
else if (info->number <= head->number) <-- CHANGE:: < changed to <= to take care of same number (as earlier stored number) being entered
{
info -> next = head;
head = info;
return; <-- CHANGE:return added here, no need to proceed further
}

prev = head;

for(temp = head->next ; temp != NULL; temp = temp->next)
{
if(temp->number >= info->number) <-- CHANGE: modified code when insertion happens between head and last
{
prev->next = info;
info->next = temp;
break;
}

prev = temp;
}
}

在您的原始代码中,最后的 else 情况:

 else
{
temp-> prev = info;
info = prev;
}

由于您提到了单链表,因此这段代码没有任何意义,但在这里您使用了“temp->prev”。

当然,您的代码中还有减少代码大小的空间(可以删除 if 和 else-if 检查并直接执行“for”循环来插入新元素)

关于c - 我正在尝试对单个链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451001/

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