又输出不了....目前觉得应该是ListInsert问题
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
struct LNode /*结点定义*/
{
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList;/*表的头指针类型*/
LinkList CreateList();
int ListLength(LinkList L);
Status GetElem(LinkList L,int i,ElemType *e);
Status LocateElem(LinkList L,ElemType e,int compare(ElemType x, ElemType y));
int compare(ElemType x,ElemType y);
void ListInsert(LinkList *L,ElemType i,ElemType e);
Status ListEmpty(LinkList L);
void Union(LinkList *La,LinkList Lb);
int main()
{
LinkList q;
LinkList La,Lb;
La=CreateList();
Lb=CreateList();
if(!ListEmpty(La)&&!ListEmpty(Lb))
Union(&La,Lb);
q=La;
while(q!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
return 0;
}
/*创建链表*/
LinkList CreateList()
{
char ch;
struct LNode *head=NULL,*p1,*p2;
while(1)
{
p1=(LinkList)malloc(sizeof(LNode));
p1->next=NULL;
scanf("%d%c",&p1->data,&ch);
if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
if(ch=='\n')
break;
}
return head;
}
/*单链表长度*/
int ListLength(LinkList L)
{
int i=0;
struct LNode *p;
p=L;
while(p)
{
p=p->next;
i++;
}
return i;
}
/* *L为单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR*/
Status GetElem(LinkList L,int i,ElemType *e)
{
int j=1; /*j为计数器*/
LinkList p=L;/* p指向第一个结点*/
while(p&&j<i) /*顺指针向后查找,直到p指向第i个元素或p为空*/
{
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;
*e=p->data; /*取第i个元素*/
return OK;
}
Status LocateElem(LinkList L,ElemType e,int compare(ElemType x, ElemType y))
{
int i=1;
LinkList p;
p=L;
for(i=0;i<ListLength(L);i++)
{
if(compare(p->data,e))
return i;
p=p->next;
}
return FALSE;
}
int compare(ElemType x,ElemType y)
{
if(x==y)
return TRUE;
else
return FALSE;
}
void ListInsert(LinkList *L,ElemType i,ElemType e)
{
LinkList p,p1,p2;
p1=*L;
p2=*L;
p->data=e;
if(i==ListLength(*L))
{
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
}
p2->next=p;
p->next=NULL;
}
else
{
if(i-1==0)
{
p->next=p1;
*L=p;
}
else
{
if(i-1==0)
{
p->next=p1;
*L=p;
}
else
{
p->next=p1;
p2->next=p;
}
}
}
}
/*若L为空表,则返回TRUE,否则返回FALSE*/
Status ListEmpty(LinkList L)
{
if(L->next)
return FALSE;
else
return TRUE;
}
void Union(LinkList *La,LinkList Lb)
{
ElemType e;
int La_len,Lb_len;
int i;
La_len=ListLength(*La);
Lb_len=ListLength(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e);
if(!LocateElem(*La,e,compare))
ListInsert(La,++La_len,e);
}
}
```