求高手帮看下这个程序,是关于线性链表的
#include <stdio.h>#include <stdlib.h>
typedef struct LISTSTRUCT //线性表结点
{
int data;
struct LISTSTRUCT *next;
}LNode,*LinkList;
LinkList InitList() //初始化头结点
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return L;
}
void CreatList(LinkList L) //出入链表数据,采用尾插法。
{
int _data;
LinkList p,q=L;
scanf("%d",&_data);
while(_data!=2012)
{
p=(LinkList)malloc(sizeof(LNode));
p->data = _data;
q->next=p;
q=p;
scanf("%d",&_data);
}
q->next=NULL;
}
LinkList CombineList(LinkList L1,LinkList L2,LinkList L3) //求两个链表和并集,假设链表数据是递增排序的。
{
L3=InitList();
LinkList p1=L1->next;//说这里的LinkList使用不合法
LinkList p2=L2->next;
LinkList p3=L3;
while(p1 &&p2)
{
if( p1->data < p2->data )
{
p3->next=p1;
p1=p1->next;
}
if( p1->data > p2->data )
{
p3->next=p2;
p2=p2->next;
}
if( p1->data = p2->data )
{
p1=p1->next;
}
}//while
//如果其中一个链表还有结点,则将其与L1链表尾想连
//如果其中还有重复的结点就删除多余的,只留一个。
if(p1)
p3->next=p1;
if(p2)
p3->next=p2;
free(L1);
free(L2);
return L3;
}
void DisplayList(LinkList L)//输出链表数据
{
L=L->next;
while(L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
int main()
{
LinkList L1,L2;
L1=InitList();
L2=InitList();
CreatList(L1);
CreatList(L2);
CombineList(L1,L2,L3);
DisplayList(L3);
return 0;
}