两路归并的数组与链表的实现方法
发布时间:2021-10-28 04:32:15
#include<iostream>
#include<assert.h>
using namespace std;
struct node
{
int val;
node * next;
node(int v)
{
val=v;
next=NULL;
}
};
node * merge(node* list1 , node * list2)
{
assert(list1!=NULL&&list2!=NULL);
node * res;
if(list1->val<=list2->val)
{
res=list1;
list1=list1->next;
}
else
{
res=list2;
list2=list2->next;
}
node * p = res;
node *p1 =list1,*p2 =list2;
while(p1!=NULL&&p2!=NULL)
{
if(p1->val<=p2->val)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else
{
p->next=p2;
p=p->next;
p2=p2->next;
}
}
while(p1!=NULL)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
while(p2!=NULL)
{
p->next=p2;
p=p->next;
p2=p2->next;
}
return res;
}
int * merge(int * arr1,int la, int * arr2,int lb)
{
int i=0,j=0;
int * arr = new int[la+lb];
int t=0;
while(i<la&&j<lb)
{
if(arr1[i]<=arr2[j])
{
arr[t++]=arr1[i];
i++;
}
else
{
arr[t++]=arr2[j];
j++;
}
}
while(i<la)
{
arr[t++]=arr1[i];
i++;
}
while(j<lb)
{
arr[t++]=arr2[j];
j++;
}
return arr;
}
void setLinkData(node * & list1 , node * & list2)
{
node * node1 = new node(2);
node * node2 = new node(3);
node * node3 = new node(7);
node * node4= new node(9);
node1->next=node2;
node2->next=node3;
node3->next=node4;
list1=node1;
node * node5 = new node(1);
node * node6 = new node(4);
node * node7 = new node(6);
node * node8 = new node(8);
node5->next=node6;
node6->next=node7;
node7->next=node8;
list2=node5;
}
int main()
{
node * list1;
node * list2;
setLinkData(list1,list2);
int arr1[]={1,6,15,17,19};
int arr2[]={2,4,6,8,10};
int * arr = merge(arr1,5,arr2,5);
node * ans = merge(list1,list2);
//Print result
int length=10;
for(int i=0;i<10;i++)
{
cout<<*arr<<endl;
arr++;
}
while(ans!=NULL)
{
cout<<ans->val<<endl;
ans=ans->next;
}
return 0;
}


猜你喜欢
- java 中接口和抽象类的区别与对比接口和抽象类的概念不一样。 接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接
- 今天Android Studio提示我这个东东。。。为了加快Gradle的构建速度,我点击了“Update”。。。之后工程一片红,全是R文件
- 在上章C++图解单向链表类模板和iterator迭代器类模版详解我们学习了单链表,所以本章来学习双向循环链表我们在上个文章代码上进行修改,
- 一、C#正则表达式符号模式字符描述\转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来^匹配输入字符串的开始位置$匹配输入字符串
- 1、文件分为ASCII文件和二进制文件,ASCII文件也称文本文件,由一系列字符组成,文件中存储的是每个字符的ASCII码值。2、FILE
- C#WinForm程序设计之图片浏览器,这次我们一起做一个图片查看器,这个图片查看器的原始图如下:我们首先来介绍一下这个原始图的构成:左边上
- 使用IDEA开发微服务项目,需要启动多个微服务,可以开启IDEA的Run DashBoard窗口,需要对IDEA中指定工程的父工程进行配置进
- 前言日志接口(slf4j)slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具
- 一、电量统计模块概述耗电信息在设置 -> 电量中能够非常直观的看到。注意,Android 所有功耗统计都是通过代码估算,没有集成电路参
- 1.依赖maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redi
- 直接贴上代码,里面都有注释/// <summary> &n
- struct OutputFilestruct OutputFile 是单个输出文件的管理器。之前在 parse_opt
- 摘要:想必大家做开发的时候都会用到下拉刷新的控件,现在各种第三方的下拉刷新控件不胜枚举。当然最NB的还是XListView。其他也有针对Gr
- Java 如何将String转化为Int在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 p
- 前言Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa存储库抽
- 1.什么是Spring Boot为什么要学Spring Boot?Spring 的诞生是为了简化 Java 程序的开发的, Spring B
- 一. 编写.cs文件注:要想编译dll中注释可用,则代码中的注释要用“ /// ” 来进行注释,否则
- 在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方
- Android 实现记住用户名和密码的功能是通过SharedPreference 存储来实现的。创建一个复选按钮,通过按钮的否选取来进行事件
- 什么是自旋锁说道自旋锁就要从多线程下的锁机制说起,由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclus