求编程:实现两个长整数相加:要求用链表(单链表或双向链表)实现两个任意数的整数相加。

2025-03-13 00:49:44
推荐回答(1个)
回答1:

刚错了 改了一下 应该没问题了
#include"iostream.h"
#include"stdlib.h"
typedef struct LNode{
int data;
struct LNode *prior,*next;
}LNode,*LinkList;

void CreateLinkList(LinkList &L)//插表尾法创双向链表
{
L=(LinkList)malloc(sizeof(LNode));
if(!L) exit(-1);
L->next=L->prior=NULL; //创建头结点
LinkList p=NULL,q=L;
char num;
for(cin>>num;num!='#';cin>>num)//输入以'#'结束
{

p=(LinkList)malloc(sizeof(LNode));
if(!p) exit(-1);
p->data=num-48;
p->next=NULL;p->prior=q;
q->next=p;q=p;

}
}

void ListPrint(LinkList L)//遍历表,输出每个元素
{
LinkList p=L->next;
while(p)
{
cout<data;
p=p->next;
}
cout<}

void ListAdd(LinkList L1,LinkList L2,LinkList &R)//L1,L2为相加的两个数,R返回结果
{
LNode *p1=L1,*p2=L2;

while(p1->next)
p1=p1->next;

while(p2->next)
p2=p2->next;

LNode *pR,*qR;
pR=(LNode *)malloc(sizeof(LNode));
pR->data=0;
pR->next=NULL;
int sum;

while(p1!=L1&&p2!=L2)
{
sum=pR->data+p1->data+p2->data;
pR->data=sum%10;

qR=(LNode *)malloc(sizeof(LNode));
qR->data=sum/10;
qR->next=pR;
pR->prior=qR;

pR=qR;p1=p1->prior;p2=p2->prior;
}
while(p1!=L1)
{
sum=pR->data+p1->data;
pR->data=sum%10;

qR=(LNode *)malloc(sizeof(LNode));
qR->data=sum/10;
qR->next=pR;
pR->prior=qR;

pR=qR;p1=p1->prior;

}

while(p2!=L2)
{
sum=pR->data+p2->data;
pR->data=sum%10;

qR=(LNode *)malloc(sizeof(LNode));
qR->data=sum/10;
qR->next=pR;
pR->prior=qR;

pR=qR;p2=p2->prior;

}
if(pR->data==0)
;
else
{
qR=(LNode *)malloc(sizeof(LNode));
qR->next=pR;
pR->prior=qR;
pR=qR;
}
R=pR;

}

void main()
{
LinkList L1,L2,R;
CreateLinkList(L1);//输入以'#'结束
CreateLinkList(L2);//输入以'#'结束
ListAdd(L1,L2,R);
ListPrint(R);

}