程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct stu////////////struct
{
int no;
struct stu *next;
}LNode,* LinkList;
void CreateList_L(LinkList &L,int n) //CreateList_L() function
{
int i;
LNode *p,*q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请依次输入结点元素,以空格隔开\n");
for(i=1;i<=n;++i)
{
p=(LinkList)malloc(sizeof(LNode));
// fflush(stdin);
scanf("%d",&p->no); //Reverse order inputing for Creating a LinkList
p->next=NULL;
q->next=p;
q=p;
}
if(n) printf("链表创建成功!\n链表中的元素有:");
else printf("创建了一个空链表!\n");
}
struct stu *insert(struct stu *ah,struct stu *bh)//ah和bh两个链表合并,按学号升序排列
{
struct stu *pa1,*pa2,*pb1,*pb2;
pa1=pa2=ah;
pb1=pb2=bh;
do
{
while((pb1->no>pa1->no)&&(pa1->next!=NULL))
{
pa2=pa1;
pa1=pa1->next;
}
if(pb1->no<=pa1->no)
{
if(ah==pa1)
ah=pb1;
else
pa2->next=pb1;
pb1=pb1->next;
pb2->next=pa1;
pa2=pb2;
pb2=pb1;
}
}while((pa1->next!=NULL)||(pa1==NULL&&pb1!=NULL));
if((pb1!=NULL)&&(pb1->no>pa1->no)&&(pa1->next==NULL))
pa1->next=pb1;
// k=ah->next;
return (ah);////////
}
void Traverse_L(LinkList &L)
{LNode *p;
p=L->next;
while(p!=NULL)
{
printf("% d",p->no);
p=p->next;
}
}
int main(void)
{
LinkList L1,L2,L3;
int InitLNodeNum1,InitLNodeNum2; //the Init LinkNode Numbers
printf("请输入链表1的结点个数 ");
scanf("%d",&InitLNodeNum1);
CreateList_L(L1,InitLNodeNum1);
Traverse_L(L1);
printf("\n");
printf("请输入链表2的结点个数 ");
// fflush(stdin);
scanf("%d",&InitLNodeNum2);
CreateList_L(L2,InitLNodeNum2);
Traverse_L(L2);
printf("\n");
// mergeList_L(L1,L2,L3);
L3=insert(L1,L2);
Traverse_L(L1);
printf("\n");
Traverse_L(L2);
printf("\n");
// L3=L3->next;
Traverse_L(L3);
printf("\n");
return 0;
}