关于链表的问题,如何解决?

给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

LinkList initList()
{
LinkList head;
head=(LinkList)malloc(sizeof(LNode));
if(head==NULL)
{
return NULL;
}
head->next=NULL;
return head;
}
//在链表末尾插入结点,并返回尾指针
LinkList insertListTail(LinkList tail, ElemType e)
{
LinkList s;
if(tail==NULL)
{
return 0;
}
s=(LinkList)malloc(sizeof(LNode));
if(s==NULL)
{
return 0;
}
s->data=e;
s->next=tail->next;
tail->next=s;
tail=s;
return tail;
}
void printList(LinkList head)
{
LinkList p=head->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
//函数返回结果链表
LinkList addList(LinkList ha,LinkList hb)
{
int x=0,y=0,i=0,j=0,k;
int a[100],b[100];
LinkList p,q,hc,s;
p=ha->next;
q=hb->next;
if(p==NULL) return hb;
if(q==NULL) return ha;
while(p){
a[i++]=p->data;
p=p->next;
}
i--;
while(i>=0){
x=x10+a[i];
i--;
}
while(q){
b[j++]=q->data;
q=q->next;
}
j--;
while(j>=0){
y=y
10+b[j];
j--;
}
hc=(LinkList)malloc(sizeof(LNode));
hc->next=NULL;
s=hc;
int sum=x+y;
while(sum){
LinkList r=(LinkList)malloc(sizeof(LNode));
r->next=NULL;
r->data=sum%10;
sum=sum/10;
s->next=r;
s=r;
}
return hc;
}
int main()
{
LinkList ha,ta,hb,tb,hc;
ElemType e;
ta=ha=initList();
tb=hb=initList();
while(scanf("%d",&e)==1){
ta=insertListTail(ta,e);
}
getchar();
while(scanf("%d",&e)==1){
tb=insertListTail(tb,e);
}
// printList(ha);
// printList(hb);
hc=addList(ha,hb);
printList(hc);
return 0;
}