将两个递增的有序链表合并为一个递减的有序链表

本文介绍了如何在C++中通过paixu和merlist函数,将两个递增有序链表转换并合并为一个递减有序链表,同时保持原链表的空间利用。
摘要由CSDN通过智能技术生成

将两个递增的有序链表合并为一个递减的有序链表
【问题描述】将两个递增的有序链表合并为一个递减的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间,表中不允许有重复的数据。

【输入形式】元素个数 元素

【输出形式】
【样例输入】

2 4 6

5

1 2 5 7 9
【样例输出】

9 7 6 5 4 2 1

#include<stdlib.h>

#include<iostream>

using namespace std;

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef int ElemType; 


typedef struct LNode

{

ElemType data;//结点的数据域

struct LNode *next;//结点的指针域

}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型
 //将两个降序的表按降序合并起来 
void merlist(LinkList &LA,LinkList &LB,LinkList &LC)
{LinkList pa,pb,pc; 
pa=LA->next;
pb=LB->next;
LC=LA;
pc=LC;
while(pa && pb){
	
	if(pa->data>pb->data){
		
		pc->next =pa;
		pc=pa;
		pa=pa->next;
	}
	else if(pa->data==pb->data){
	
	     pc->next =pa;
		 pc=pa;
		 pb=pb->next;
		 pa=pa->next;
	} 
	else
	{	pc->next =pb;
		pc=pb;
		pb=pb->next;
		
	}
}
pc->next=pa?pa:pb;  //将非空表的剩余段插入到pc所指节点之后 
delete LB;
}
//降序的函数 
void paixu(LinkList &L,int n)
{int i,j;
 LinkList p,q;
 p=L;
 ElemType temp;
 int flag=1;
 i=1;
 while(i<=n-1 && flag){
	q=L->next;
	p=q->next;
	flag=0;
	j=1;

	while(j<=n-i){
		if(q->data< p->data){
			temp= q->data;
			q->data = p->data;
			p->data=temp;
			flag=1;
		}
		q=p;
		p=p->next;
		j++;
	}
	i++;
 }
}

int main(){
//先创建单链表
LinkList L1,L2,L3; 
L1 = new LNode;
L1->next=NULL;
LinkList p,r,y;
r=L1;

L2 = new LNode;
L2->next=NULL;
LinkList q,s;
s=L2;

//输入
int n1;
cin>>n1;
for(int i=1;i<=n1;i++)
{
	p=new LNode;
    cin>>p->data;
	p->next=NULL;
	r->next=p;
	r=p;
}
int n2;
cin>>n2;
for(int i=1;i<=n2;i++)
{
	q=new LNode;
    cin>>q->data;
	q->next=NULL;
	s->next=q;
	s=q;
}	
//调用函数 
paixu(L1,n1); //将表降序排列 
paixu(L2,n2); //将表降序排列 
merlist(L1,L2,L3);	
//输出
y=L3->next;
while(y)
{cout<<y->data<<" ";
 y=y->next;
}	
	
return 0;	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值