两个升序表合并成一个降序表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
LNode *head,*p,*q;
int i,n;
head=(LNode*)malloc(sizeof(LNode));//生成头结点
head->next=NULL ;
p=head;
q=p;//指针q始终指向链尾结点
printf("输入链表的长度: \n");
scanf("%d", &n);//读入结点数据
int main(int argc, char* argv[])
{
LNode *A,*B,*C;
printf("输入链表A:\n");
A=CreateLinkList(); //生成单链表A
printf("输出链表A的元素为:\n");
print(A); //输出单链表A
printf("输入链表B:\n");
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//data为结点的数据信息
struct node *next;//next为指向后继结点的指针
}LNode; //单链表结点类型
LNode *CreateLinkList() //生成单链表
q=q->next;
}
s->next=(*C)->next; //用头插法将结点*s插到链表*C的头结点之后
(*ຫໍສະໝຸດ Baidu)->next=s;
}
if(p==NULL)//如果指向链表A的指针*p为空,则使*p指向链表B
p=q;
while(p!=NULL) //将*p所指链表中的剩余结点依次摘下插入的链表C的链首
q=p;
}
return head; //返回指向单链表的头指针head
}
void MergeList(LNode *A,LNode *B,LNode **C) //将升序链表A、B合并成降序链表*C
{
LNode *p,*q,*s;
p=A->next;// p指向链表A的第一个未比较的数据结点
q=B->next;// q指向链表B的第一个未比较的数据结点
printf("输入链表中元素的排列顺序为: \n");
for(i=n;i>0;i--)//生成链表的数据结点
{
p=(LNode *)malloc(sizeof(LNode));//申请一个结点空间
scanf("%d",&p->data);
p->next=NULL;
q->next=p;//在链尾插入
B=CreateLinkList(); //生成单链表B
printf("输出链表B的元素为:\n");
print(B); //输出单链表B
printf("生成元素值递减的新链表C:\n");
MergeList(A,B,&C); //将升序链表A、B合并成降序链表C
printf("输出新链表C为:\n");
*C=A;//生成链表的*C的头结点
(*C)->next=NULL;
free(B); //释放链表B的头结点空间
while(p!=NULL&&q!=NULL) //将A、B两链表中当前比较结点中值小的元素赋给*s
{
if(p->data<q->data)
{
s=p;
p=p->next;
}
else
{
s=q;
print(C); //输出单链表C
return 0;
}
{
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");
}
相关文档
最新文档