sdut 链表6-------7-6 sdut-C语言实验-有序链表的归并

7-6 sdut-C语言实验-有序链表的归并

分数 20

全屏浏览

切换布局

作者 马新娟

单位 山东理工大学

分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。

输入格式:

第一行输入M与N的值;

第二行依次输入M个有序的整数;

第三行依次输入N个有序的整数。

输出格式:

输出合并后的单链表所包含的M+N个有序的整数。

输入样例:

复制代码
6 5
1 23 26 45 66 99
14 21 28 50 100

输出样例:

复制代码
1 14 21 23 26 28 45 50 66 99 100

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

cpp 复制代码
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct node pnode;
struct node{
	int data;
	struct node* next;
};
void put(struct node*L)
{
	L = L->next;
	int x=0;
	for(;L!=NULL;L=L->next)
	{
		x++;
		if(x>1) cout<<" ";
		cout<<L->data;
	}
		cout<<endl;
}
void together(struct node*&L1,struct node*&L2)
{
	struct node* p1 = L1->next,*p2 = L2->next,*tail = L1;
	while(p1&&p2)
	{
        //此处也存在思维点,这样子比思维(两个节点比较,小的接前面,大的接后面,每一轮都这样)方便太多了,省时好用!
		if(p1->data<=p2->data)     
		{
			tail->next = p1;                
			p1 = p1->next;                  //tail = p1;
			tail->next->next = NULL;        //p1 = p1->next;
			tail = tail->next;              //tail->next = NULL;
		}
		else 
		{
			tail->next = p2;
			p2 = p2->next;                  //tail = p2;  
			tail->next->next = NULL;        //p2 = p2->next;
			tail = tail->next;              //tail->next = NULL;  
		}
	}
	if(p1!=NULL)
		tail->next = p1;        //这样子会使剩余的所有节点都会接上,简洁好用
	if(p2!=NULL)
		tail->next = p2; 
}
int main()
{
	int m,n;
	while(cin>>m>>n)
	{
    struct node* L1,*p1,*tail1;
	L1 = (pnode*)malloc(sizeof(pnode));
	L1->next = NULL;
	tail1 = L1;
	struct node* L2,*p2,*tail2;
	L2 = (pnode*)malloc(sizeof(pnode));
	L2->next = NULL;
	tail2 = L2;
	int x;
	for(int i=0;i<m;i++)
	{
		cin>>x;
		p1 = (pnode*)malloc(sizeof(pnode));
		p1->next = NULL;
		p1->data = x;
		
		tail1->next = p1;
		tail1 = tail1->next;
	}
	for(int i=0;i<n;i++)
	{
		cin>>x;
		p2 = (pnode*)malloc(sizeof(pnode));
		p2->next = NULL;
		p2->data = x;
		
		tail2->next = p2;
		tail2 = tail2->next;
	}
	together(L1,L2);
	put(L1);
	}
}
相关推荐
生成论实验室2 分钟前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》导论:在破碎的世界寻找统一语法
人工智能·科技·算法·架构·创业创新
承渊政道2 分钟前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
杨连江7 分钟前
原子级平面限域协同晶核诱导定向生长单层鳞片石墨的研究
算法
广州山泉婚姻8 分钟前
C语言三种基本程序结构详解
c语言·开发语言
上弦月-编程11 分钟前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言
MATLAB代码顾问12 分钟前
混合粒子群-模拟退火算法(HPSO-SA)求解作业车间调度问题——附MATLAB代码
算法·matlab·模拟退火算法
Felven17 分钟前
C. Prefix Min and Suffix Max
算法
加农炮手Jinx17 分钟前
LeetCode 26. Remove Duplicates from Sorted Array 题解
算法·leetcode·力扣
加农炮手Jinx17 分钟前
LeetCode 88. Merge Sorted Array 题解
算法·leetcode·力扣
Hhy_110718 分钟前
【从零开始学习数据结构 ④】:栈 ——后进先出的艺术
c语言·数据结构·学习·visual studio