当前位置:
文档之家› 将递增有序的单链表A和B合并成递减有序的单链表C
将递增有序的单链表A和B合并成递减有序的单链表C
print(C);//输出单链表C
}
B=CreateLinkList();//生成单链表B
printf("Output list B:\n");
print(B);//输出单链表B
printf("Make list C:\n");
Merge(A,B,&C);//将升序链表A、B合并成降序链表C
printf("Output list C:\n");
p->next=NULL;
q->next=p;//在链尾插入
q=p;
}
return head;//返回指向单链表的头指针head
}
void Merge(LNode *A,LNode *B,LNode **C)
{ //将升序链表A、B合并成降序链表*C
LNode *p,*q,*s;
p=A->nex
LNode *A,*B,*C;
printf("Input data of list A:\n");
A=CreateLinkList();//生成单链表A
printf("Output list A:\n");
print(A);//输出单链表A
printf("Input data of list B:\n");
将递增有序的单链表A和B合并成递减有序的单链表C
实现程序如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//data为结点的数据信息
struct node *next;//next为指向后继结点的指针
}LNode;//单链表结点类型
{
s=p;
p=p->next;
}
else
{
s=q;
q=q->next;
}
s->next=(*C)->next; //用头插法将结点*s插到链表*C的头结点之后
(*C)->next=s;
}
if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表B
p=q;
while(p!=NULL) //将*p所指链表中的剩余结点依次摘下插入的链表C的链首
scanf("%d", &n);//读入结点数据
printf("Input data of list: \n");
for(i=1;i<=n;i++)//生成链表的数据结点
{
p=(LNode *)malloc(sizeof(LNode));//申请一个结点空间
scanf("%d",&p->data);
{
s=p;
p=p->next;
s->next=(*C)->next;
(*C)->next=s;
}
}
void print(LNode *p)//输出单链表
{
p=p->next;
while(p!=NULL)
{
printf("%d,",p->data);
p=p->next;
}
printf("\n");
}
void main()
LNode *CreateLinkList()//生成单链表
{
LNode *head,*p,*q;
int i,n;
head=(LNode*)malloc(sizeof(LNode));//生成头结点
head->next=NULL ;
p=head;
q=p;//指针q始终指向链尾结点
printf("Input length of list: \n");
q=B->next;// q始终指向链表B的第一个未比较的数据结点
*C=A;//生成链表的*C的头结点
(*C)->next=NULL;
free(B); //回收链表B的头结点空间
while(p!=NULL&&q!=NULL) //将A、B两链表中当前比较结点中值小者赋给*s
{
if(p->data<q->data)