有关链表表示二项式相加的问题。

juedichongsheng 2010-03-24 10:42:03
#include<iostream>
using namespace std;
class list{
int expn;
int coef;
list *next;
public:
list(){}
void great();
void print();
void paixu();
void add(list *p1,list *p2);
};
list *head,*p,*a1;
int n;
void list::great()
{cout<<"请输入链表的长"<<endl;
cin>>n;
head=p=new list;
p->next=new list;
p=p->next;
for(int i=1;i<=n;++i)
{cout<<"输入第"<<i<<"个节点"<<endl;
cin>>p->expn;
cin>>p->coef;
p->next=new list;
p=p->next;}
p->next=NULL;
next=p->next ;
}
void list::print()
{p=head->next;
for(int i=1;i<=n;++i)
{
cout<<p->expn<<p->coef<<endl;
p=p->next;
}
}
void list::add(list *p1,list *p2)
{
p1=p1->next;p2=p2->next ;
list *c;c=new list;
head=c;
while(p1!=NULL||p2!=NULL)
{
if(p1->coef==p2->coef)
{c->next =new list;
c=c->next ;
c->coef =p1->coef ;
c->expn =(p1->expn) +(p2->expn);
p1=p1->next ;
p2=p2->next;
}
else if(p1->coef >p2->coef)
{c->next =new list;
c=c->next ;
c->coef =p2->coef;
c->expn =p2->expn;
p2=p2->next;
}
else {
c->next =new list;
c=c->next ;
c->coef =p1->coef;
c->expn =p1->expn;
p1=p1->next;
}
}

if((p1==NULL)||(p2!=NULL)){
c->next =p2;
}
else if((p2==NULL)||(p1!=NULL)){
c->next =p1;
}
else if((p1==NULL)||(p2==NULL))
{c->next=NULL;}

}

void main()
{list a,b,c;
a.great();
a1=head;//用新定义的a1把a链表的头记录下来。
a.print();
b.great();
b.print ();
c.add (a1,head);//这里的head是b链表的头指针。
c.print();

}
这里的节点储存的是二项式的系数和指数。我们默认输入的链表的指数都是按指数升幂的(相加函数在这个前提下,才正确
我调试了很多次出现一个问题。。
我输入数据;
a链表;1 2 (就一个节点)
b链表:2 3 / 3 4 (两个节点)
现在调试,出现了0xC0000005: 读取位置 0x00000004 时发生访问冲突这个错误。对局部变量跟踪后发现:
add函数中的形参p2的传递时正确的链表中有2 3/3 4这两个数据。
可是p1中的数据就没有传递过来,全部是无法计算表达式的值。
再追踪回去,c.add (a1,head);该语句中的a1中的数据完全正确,也就是说。a1表示的就是a链表(上面得a1=head起作用了)。但是该数据传递到形参p1上时,却没有传递过去。但是p2,却传递过去了。
这就造成在c链表中。无法再链表p1中提取数据。
我现在想问的就是这个问题。我后面写的相加的程序。也许还有些小毛病。但这个一直困扰我。
谢谢了、、、、






...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟多少号? 2010-03-25
  • 打赏
  • 举报
回复
太长了 接分 帮你顶上去
dubiousway 2010-03-24
  • 打赏
  • 举报
回复
void list::add(list *p1,list *p2)
{
p1=p1->next;p2=p2->next ;
list *c;c=new list;
head=c;
while(p1!=NULL||p2!=NULL) 语义错误。似乎应该改成:while(p1!=NULL && p2!=NULL) . lz 再看看是不是。我没调试,只是觉得这样。
{
if(p1->coef==p2->coef)

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧