BJFUOJ:基于链表的两数之和
#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*Linklist;
void Init_Linklist(Linklist &l){
l = new Lnode;
l->next = NULL;
}
void CreatLinlist(Linklist &l,int n){
Linklist r;
for(int i=0;i<n;i++){
r = new Lnode;
cin>>r->data;
r->next = l->next;
l->next = r;
}
}
void Sum(Linklist &l1,Linklist &l2,Linklist &l3){
Linklist p = l1->next,q = l2->next,r = l3;
int pre = 0;
while(p && q){
Linklist rr = new Lnode;
rr->data = (pre + p->data + q->data) % 10;
pre = (pre + p->data + q->data) / 10;
rr->next = r->next;
r->next = rr;
r = rr;
p = p->next;
q = q->next;
}
while(p){
Linklist rr = new Lnode;
rr->data = (pre + p->data) % 10;
pre = (pre + p->data) / 10;
rr->next = r->next;
r->next = rr;
r = rr;
p = p->next;
}
while(q){
Linklist rr = new Lnode;
rr->data = (pre + q->data) % 10;
pre = (pre + q->data) / 10;
rr->next = r->next;
r->next = rr;
r = rr;
q = q->next;
}
if(pre != 0){
Linklist rr = new Lnode;
rr->data = pre;
rr->next = r->next;
r->next = rr;
r = rr;
}
}
void Out(Linklist &l){
Linklist p = l->next;
while(p->next){
cout<<p->data<<" ";
p = p->next;
}
cout<<p->data<<endl;
}
int main(){
while(1){
int n,m;
cin>>n>>m;
if(n == 0 && m == 0) break;
Linklist l1,l2,l3;
Init_Linklist(l1);
Init_Linklist(l2);
Init_Linklist(l3);
CreatLinlist(l1,n);
CreatLinlist(l2,m);
Sum(l1,l2,l3);
Out(l3);
}
return 0;
}