能不能不改变我的Add函数的参数个数和类型把它改正确,求助各位大神了
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
class Node
{
public:
int data;//存储数据
Node *next;
};
class LinkList
{
private:
int length;//链表长度
public:
Node first;
LinkList();
LinkList(int a[],int n);//有参构造函数
~LinkList();
void Reserve(Node first);//逆置链表
void PrintList();//打印链表
void PrintList(Node* first);//打印链表
friend LinkList Add(LinkList A,LinkList B);//链表A,B相加,并返回一个链表
};
#endif // HEAD_H_INCLUDED
#include "Head.h"
#include
using namespace std;
LinkList::LinkList()//无参构造函数的实现
{
first=new Node;
first->next=NULL;
}
LinkList::LinkList(int a[],int n)//有参构造函数的实现
{
first=new Node;
first->next=NULL;
for(int i=0; i
{
Node *s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s;
}
length=n;
}
LinkList::~LinkList()//析构函数的实现
{
while(first!=NULL)
{
Node* q=first;
first=first->next;
delete q;
}
}
void LinkList::Reserve(Node* first)//逆置函数的实现
{
Node* p=first->next;
first->next=NULL;
while(p!=NULL)
{
Node* u=p->next;
p->next=first->next;
first->next=p;
p=u;
}
}
void LinkList::PrintList(Node* first)//打印函数的实现
{
Node* p=first->next;
while(p!=NULL)
{
cout<data;
p=p->next;
}
}
void LinkList::PrintList()//打印函数的实现
{
Node* p=first->next;
while(p!=NULL)
{
cout<data;
p=p->next;
}
}
LinkList Add(LinkList A,LinkList B)//A、B链表相加
{
int flag=0;
int i=0;
int n=A.length;
int m=B.length;
Node* a=A.first->next;
Node* b=B.first->next;
LinkList C;
while(i
{
Node* s=new Node;//创建一个节点来依次储存链表A、B各位相加的数值
s->data=(a->data+b->data+flag)%10;
flag=(a->data+b->data+flag)/10;
s->next=C.first->next;//利用头插法来创建C链表
C.first->next=s;
a=a->next;
b=b->next;
i++;
}
for(;i
{
Node* s=new Node;
s->data=(a->data+flag)%10;
flag=(a->data+flag)/10;
s->next=C.first->next;
C.first->next=s;
a=a->next;
}
for(;i
{
Node* s=new Node;
s->data=(b->data+flag)%10;
flag=(b->data+flag)/10;
s->next=C.first->next;
C.first->next=s;
b=b->next;
}
if(flag)//最后若flag为1时进位
{
Node* s=new Node;
s->data=1;
s->next=C.first->next;
C.first->next=s;
}
C.first->next=NULL;
return C;
}
#include "Head.h"
#define MaxSize 100
#include
using namespace std;
int main()
{
string i,j;
int a[MaxSize],b[MaxSize];
c:cout<<"请输入第一个大整数(<=100位):"<
cin>>i;
int lena=i.size();
if(lena>MaxSize)//判断输入第一位大整数的位数是否大于100位,若大于100位,则回到c处重新输入第一位大整数
{
cout<<"输入数值过大,请输入100位以内数值!"<
goto c;
}
d:cout
cin>>j;
int lenb=j.size();
if(lenb>MaxSize)//判断输入第二位大整数的位数是否大于100位,若大于100位,则回到d处重新输入第二位大整数
{
cout<<"输入数值过大,请输入100位以内数值!"<<endl;
goto d;
}cout<<endl;
for(int m=0;m<lena;m++)//将字符串转换为整数
a[m]=i[m]-48;
for(int n=0;n<lenb;n++)
b[n]=j[n]-48;
LinkList A(a,lena);//构造A链表
LinkList B(b,lenb);//构造B链表
LinkList C;
C=Add(A,B);
A.Reserve(A.first);//A链表逆置
A.PrintList(A.first);//打印链表A
cout<<endl;
B.Reserve(B.first);//B链表逆置
B.PrintList(B.first);//打印链表B
cout<<endl;
C.Reserve(C.first);
C.PrintList();
return 0;
}