合并两个单链表(单链表元素均按值非递减排列)

前提条件:

单链表La和Lb均按值非递减排列,归并为单链表Lc也是按照值非递减排列。

思路:

比较La和Lb中的值,非大的值先插入到Lc中,然后输出检验。

代码如下:

头文件和宏定义(保存为constant.h):

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
#define TURE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

函数实现(包括遍历、逆序创建单链表、归并;保存为header.h):

#include"constant.h"
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode,*LinkList;

//遍历:顺序输出单链表
Status ListTraverse(LinkList &L)
{
LinkList p;
p = L->next;
while(p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
return OK;
}

//逆序创建线性单链表
void CreatList(LinkList &L)
{
int n,i;
cout << "输入单链表长度n:";
cin >> n;
cout << endl;
LinkList p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
cout << "逆序输入要建立的单链表:" << endl;
for (i = n; i > 0; --i)
{
p = (LinkList)malloc(sizeof(LNode));
cin >> p->data;
p->next = L->next;
L->next = p;
}
cout << "现在顺序输出单链表:" << endl;
ListTraverse(L);
}
//两个有序单链表合并为一个单链表
//已知单链线性表La和Lb的元素按照值非递减排列
//归并La和Lb得到新的单链线性表Lc的元素也是按照值非递减排列
void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LinkList pa, pb, pc;
pa = La->next;
pb = Lb->next;
Lc = pc = La; //用La的头结点作为Lc的头结点
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;
}
}
pc->next = pa ? pa : pb; //插入剩余段
free(Lb); //释放Lb的头结点

主函数:

#include "stdafx.h"
#include "header.h"
int main()
{
LinkList La, Lb, Lc;
CreatList(La); 
CreatList(Lb);
MergeList(La, Lb, Lc);
cout << "输出合并后的链表:" << endl;
ListTraverse(Lc);
    return 0;
}

执行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值