今天在这里得好好感谢下魔人大哥,他说写程序得闲自己写不能看着书,那样影响自己的思路,果然啊我照着书的算法是实现不了下面这样的结果的,还是自己想了想才做出来。。。。。。。。
真的很感谢他。。。。。。
#include "stdio.h"
#include "windows.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int *Charme;
////////////////////////////////////////
//定义一个链表
////////////////////////////////////////
typedef struct ListNode
{
Charme data;
struct ListNode *next;
}ListNode,*LinkList;
////////////////////////////////////////
//创建链表
////////////////////////////////////////
LinkList CreateList_l(int n)
{
LinkList l=(LinkList)malloc(sizeof(ListNode));//生成新结点
LinkList p=l;
for (int i=n;i>0;--i)
{
//printf("请输入元素\n");
scanf("%d",&p->data);
if (i>1)
{
p=p->next=(LinkList)malloc(sizeof(ListNode));
p->next=NULL;
}
else
{
p->next=NULL;
}
}
return l;
}
/////////////////////////////////////////////
//合并链表
/////////////////////////////////////////////
LinkList MergerList(LinkList la,LinkList lb,LinkList lc)
{
//单链表la lb是按非递减排列的
//合并后的LC也是非递减的
LinkList pa=la->next;
LinkList pb=lb->next;
LinkList pc=lc=la;//把A的头结点作为C的头结点
while (pa&&pb)
{
if (pa->data<pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
pa=pa->next;//这一句书上没有,自己想想就知道了,不能全信书啊
}
}
pc->next=pa?pa:pb;
free(lb);
return lc;
}
///////////////////////////////////////
//显示链表内容
///////////////////////////////////////
void PrintList(LinkList p,int n)
{
for(int i=0;i<n;i++)
{
printf("%d->",p->data);
p=p->next;
}
}
/////////////////////////////////////////
//计算链表长度
/////////////////////////////////////////
int GetLength_l(LinkList l)
{
int cnt=1;
LinkList tmp=l;
while(tmp->next !=NULL)
{
tmp=tmp->next;
cnt++;
}
return cnt;
}
int main()
{
//先创建链表
printf("输入A链表的元素(4个元素)\n");
LinkList la=CreateList_l(4);
printf("输入B链表的元素(6个元素)\n");
LinkList lb=CreateList_l(6);
//合并链表
LinkList lc=(LinkList)malloc(sizeof(ListNode));
LinkList c=MergerList(la,lb,lc);
if (c!=NULL)
{
PrintList(c,GetLength_l(c));
}
else
{
printf("合并失败");
}
return 0;
}
用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 551; .NET CLR 2.0.50727)