如何解决降序排列的链接列表显示不按顺序显示
我的多项式链表对某些输入不起作用,有人可以告诉我我哪里出错了吗?
以下输入无效,但
insert(10,1);
insert(20,2);
insert(30,3);
insert(50,5);
insert(60,6);
insert(40,4);
但这可行
insert(60,6);
insert(20,2);
insert(50,5);
insert(40,4);
insert(10,1);
insert(30,3);
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int coeff;
int pow;
struct Node *next;
};
struct Node *head = NULL;
void insert(int coeff,int pow)
{
struct Node *link = (struct Node *)(malloc(sizeof(struct Node)));
link->coeff = coeff;
link->pow = pow;
if (head == NULL)
{
link->next = NULL;
head = link;
}
else
{
if (pow > head->pow)
{
link->next = head;
head = link;
}
else
{
struct Node *temp = head;
while ((temp->pow > pow + 1) && (temp->next))
temp = temp->next;
link->next = temp->next;
temp->next = link;
}
}
}
void print()
{
struct Node *temp = head;
while (temp->next)
{
printf("%dx^%d+",temp->coeff,temp->pow);
temp = temp->next;
}
printf("%dx^%d=0",temp->pow);
}
int main()
{
insert(10,4);
print();
return 0;
}
解决方法
while ((temp->pow > pow + 1) && (temp->next))
temp = temp->next;
您的迭代逻辑有问题。我认为您正在尝试将temp迭代到下一个元素应为 link (您的新节点)的位置。但是要确定这个位置,您的逻辑是错误的。
5 -> 3 -> 1
如果您尝试在此处插入2,则为 temp = head - 5>(2 + 1)&& temp-> next 。因此,您最终将在5之后插入2,这是不正确的。
我避免用汤匙喂食溶液。请尝试以此为基础。另外,列表排序似乎与 coeff 没有任何关系,您只是在 pow 上进行比较。将来您可能希望从问题中抽象出不必要的细节。
,程序中有错误,即逻辑错误,编译器不会显示,运行时也不会发生。让我告诉您为什么您的代码不适用于第一组。取insert(10,1)和insert(20,2)。在第一次插入期间,由于第一个if和在第二次插入期间,您的值将存储在第一个节点中,因为第二次插入pow的值2将与head.pow进行比较,第二次if和value存储在head.pow中的时间为1,因此如果if变为true,则您的程序将在执行完if语句和节点后连接到您的程序,然后将其更新为未连接的新链接,并且每次pow都会发生> head.pow在您的第一组输入中。您需要在此处更正逻辑。也许您可以共享这两组输入的输出,我将可以为您提供更多帮助,但是我说,如果您尝试自己更正逻辑,那就更好了。如果您仍然需要帮助,请告诉我。
,去那里为您修理
您必须比较下一个电源并将其添加到列表中
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int coeff;
int pow;
struct Node *next;
};
struct Node *head = NULL;
void insert(int coeff,int pow)
{
struct Node *link = (struct Node *)(malloc(sizeof(struct Node)));
link->coeff = coeff;
link->pow = pow;
if (head == NULL)
{
link->next = NULL;
head = link;
}
else
{
if (pow > head->pow)
{
link->next = head;
head = link;
}
else
{
struct Node *temp = head;
while (temp->next && (temp->next->pow > pow))
temp = temp->next;
link->next = temp->next;
temp->next = link;
}
}
}
void print()
{
struct Node *temp = head;
while (temp->next)
{
printf("%dx^%d+",temp->coeff,temp->pow);
temp = temp->next;
}
printf("%dx^%d=0",temp->pow);
}
int main()
{
insert(70,7);
insert(50,5);
insert(20,2);
insert(10,1);
insert(80,8);
insert(60,6);
insert(30,3);
insert(40,4);
print();
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。