c语言稀疏矩阵的加法问题

Description
给出两个稀疏矩阵A和B,分别用三元组序列表示,求A+B 。

Input
输入的第一行是3个整数 m, n, c ,表示矩阵A的行数、列数,以及非零元个数。其中 1 ≤ m, n ≤ 10000 , 0 < c < 7000

接下来c行,每行是一个三元组 (e, f, v) ,e表示行号,f表示列号,v表示该非零元的值。其中 0 ≤ e < m , 0 ≤ f < n

三元组按"行优先次序"存放。

接下来是对矩阵B的描述,格式同矩阵A。

Output
首先输出A+B和矩阵的行数,列数,非零元素个数。

接着输出A+B和矩阵的三元组形式,一个一行。三元组各元之间用一个空格分隔。

按行优先次序输出。

下面是我的代码,请帮我看一下哪里错了,谢谢了
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int i;
int j;
int data;
struct list *next;
}Node,*LinkList;
LinkList InitList(int m,int n,int c);
void PrintList(LinkList L1);
int SortList(LinkList L1,LinkList L2);
int main()
{
int m1,m2,n1,n2,c1,c2,num;
LinkList L1,L2;
scanf("%d%d%d",&m1,&n1,&c1);
if(m1*n1<c1)
return 0;
L1=InitList(m1,n1,c1);
if(L1==NULL)
return 0;
scanf("%d%d%d",&m2,&n2,&c2);
if(m2*n2<c2)
return 0;
L2=InitList(m2,n2,c2);
if(L2==NULL)
return 0;
num=SortList(L1,L2);
printf("%d %d %d\n",m1,n1,num);
PrintList(L1);
return 0;
}
LinkList InitList(int m,int n,int c)
{
int i;
LinkList s,p,L;
if((s=(LinkList)malloc(sizeof(Node)))==NULL)
exit(1);
s->next=NULL;
L=s;
p=s;
for(i=1;i<=c;i++)
{
if((s=(LinkList)malloc(sizeof(Node)))==NULL)
exit(1);
scanf("%d%d%d",&s->i,&s->j,&s->data);
if(s->i<0||s->i>=m||s->j<0||s->j>=n)
return NULL;
p->next=s;
p=s;
}
return L;
}
int SortList(LinkList L1,LinkList L2)
{
LinkList p1,p2,s,q1,q2;
int count=0;
p1=L1->next;
p2=L2->next;
q2=L1;
L1->next=NULL;
free(L2);
while(p1&&p2)
{
if(p1->i<p2->i)
{
s=p1;
p1=p1->next;
}
else if(p1->i>p2->i)
{
s=p2;
p2=p2->next;
}
else if(p1->i==p2->i&&p1->j<p2->j)
{
s=p1;
p1=p1->next;
}
else if(p1->i==p2->i&&p1->j>p2->j)
{
s=p2;
p2=p2->next;
}
else if(p1->i==p2->i&&p1->j==p2->j)
{
p1->data=p1->data+p2->data;
s=p1;
q1=p2;
p1=p1->next;
p2=p2->next;
free(q1);
}
q2->next=s;
q2=s;
count++;
}
if(p1==NULL)
p1=p2;
while(p1)
{
count++;
q2->next=p1;
q2=p1;
p1=p1->next;
}
return count;
}
void PrintList(LinkList L1)
{
LinkList p;
p=L1->next;
free(L1);
while(p)
{
printf("%d %d %d\n",p->i,p->j,p->data);
p=p->next;
}
}

#include <stdio.h>
#include <malloc.h>

#define MAX 100

struct matnode //十字链表结点的定义
{
int row,col;
struct matnode *right,*down;
union {
int val;//表结点使用V域
struct matnode *next;//表头结点使用next域
}tag;
};
struct matnode *createmat(struct matnode *hmone[MAX])
{
int m,n,t,s,i,r,c,v;
// struct matnode *l,*p,*q;
struct matnode *h[100],*l,*p,*q; //h[]是十字链表每行的表头指针数组
printf("行数m,列数n,非零元素个数t:");
//scanf("%d,%d,%d",&m,&n,&t); //输入行、列数,非零元素个数
scanf("%d,%d,%d",&m,&n,&t);//输入行、列数,非零元素个数
l=(struct matnode *)malloc(sizeof(struct matnode));
h[0]=l;//h[]是指针数组,分别指向头节点和行、列表头结点
l->row=m; //建立十字链表头结点*l
温馨提示:答案为网友推荐,仅供参考