您的位置:首页 > 编程语言 > C语言/C++

已知头指针分别为la和lb的有序单链表,其数据元素都是按值非递减排列。现要归并la和lb得到单链表lc,使得lc中的元素按值非递减排列。

2018-04-07 14:56 2301 查看
    已知头指针分别为la和lb的有序单链表,其数据元素都是按值非递减排列。现要归并la和lb得到单链表lc,使得lc中的元素按值非递减排列。
主程序:#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct SingleNode{
ElemType data;
struct SingleNode *next;
}SList;
#include"SList.h"

int main()
{
freopen("in.txt","r",stdin);

SList *la,*lb,*lc;
int a,b,i;
ElemType k;
ListInitialize(&la);
ListInitialize(&lb);
ListInitialize(&lc);
printf("输入链表la的元素个数: ");
scanf("%d",&a);
printf("输入链表la的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(la,k);
}
printf("输入链表lb的元素个数: ");
scanf("%d",&a);
printf("输入链表lb的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(lb,k);
}
/*开始干活*/
change(la,lb,lc);

/*检验*/
SList *p;
p=lc->next;
printf("\n\n\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}

return 0;
}头文件SList.h
void ListInitialize(SList **head)
{
*head=(SList *)malloc(sizeof(SList));
if(!*head)
exit(1);
(*head)->next=NULL;
}

int ListInsert(SList *head,ElemType k)
{
SList *p,*q;
p=head;
while(p->next!=NULL && k>p->next->data)
p=p->next;
q=(SList *)m
4000
alloc(sizeof(SList));
if(!q)
exit(1);
q->data=k;
q->next=p->next;
p->next=q;
return 1;
}

void change(SList *la,SList *lb,SList *lc)
{
SList *p,*q,*k;
p=la->next,q=lb->next,k=lc;
while(p!=NULL && q!=NULL)
{
if(p->data>q->data) {
ListInsert(lc,q->data);
q=q->next;
}
else if(p->data<q->data){
ListInsert(lc,p->data);
p=p->next;
}
else {
ListInsert(lc,q->data);
q=q->next;
ListInsert(lc,p->data);
p=p->next;
}
}
while(p!=NULL)
{
ListInsert(lc,p->data);
p=p->next;
}
while(q!=NULL)
{
ListInsert(lc,q->data);
q=q->next;
}
}
测试用例:



运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 归并指针
相关文章推荐