假设本帅博主有链表arr1:

int[] arr1 = {1,3,6,8,23,34,56,77,90};

链表arr2:

int[] arr2 = {-90,34,55,79,87,98,123,234,567};

我要如何才能够合并这两个有序链表,使得合并后的链表有序,并且使算法的时间复杂度为O(n)呢?

思考一下噢~

.......

本帅博主也就不说别的啦,直接上代码:

Node类:

public class Node
{private Node next;private Integer number;Node(Integer number){this.number=number;next=null;}Node(){}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}public Integer getNumber() {return number;}public void setNumber(Integer number) {this.number = number;}}

算法实现:

public class SortForLink {static int a=0;public static void main(String[] args) {// TODO Auto-generated method stubint[] arr1 = {1,3,6,8,23,34,56,77,90};int[] arr2 = {-90,34,55,79,87,98,123,234,567};Node link1 = new Node();Node link2 = new Node();Node link3 = new Node();getLink(arr1,link1);getLink(arr2,link2);mergeLink(link1, link2, link3);viewLink(link3);}/*** 构建链表* @param arr* @param link*/public static void getLink(int[] arr, Node link) {for(int i = 0; i < arr.length; i++) {link.setNumber(arr[i]);link.setNext(new Node());link = link.getNext();}}/*** 输出链表* @param link*/public static void viewLink(Node link) {while(link.getNumber() != null) {System.out.print(link.getNumber()+" ");link = link.getNext();}System.out.println("a的值是:"+a);}/*** 合并链表* @param link1* @param link2* @param link3*/public static void mergeLink(Node link1, Node link2, Node link3) {if( (link2.getNumber() != null) && (link1.getNumber() == null || link1.getNumber() >= link2.getNumber()) ) {link3.setNumber(link2.getNumber());link3.setNext(new Node());link2 = link2.getNext();link3 = link3.getNext();a++;mergeLink(link1, link2, link3);}else if( (link1.getNumber() != null) && (link2.getNumber() == null || link2.getNumber() > link1.getNumber()) ) {link3.setNumber(link1.getNumber());link3.setNext(new Node());link1 = link1.getNext();link3 = link3.getNext();a++;mergeLink(link1, link2, link3);}else {System.out.println("==没有了,结束啦!==");}       }
}

运行结果如下:

好啦,以上就是关于如何合并两个有序链表为一个有序链表并使时间复杂度为O(n)的算法相关知识总结啦,如果大家有什么不明白的地方或者发现文中有描述不好的地方,欢迎大家留言评论,我们一起学习呀。

Biu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pia!

杂谈——如何合并两个有序链表(时间复杂度为O(n))相关推荐

  1. fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

    原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...

  2. 【LeetCode】【HOT】21. 合并两个有序链表(递归)

    [LeetCode][HOT 100]21. 合并两个有序链表 文章目录 [LeetCode][HOT 100]21. 合并两个有序链表 package hot;import java.util.Ar ...

  3. leetcode 21 java_LeetCode 21. 合并两个有序链表

    LeetCode 21. 合并两个有序链表 题目 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-> ...

  4. LeetCode 21. 合并两个有序链表(链表)

    上一篇博客:LeetCode 20. 有效的括号(栈.字符串)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...

  5. 【LeetCode】21、合并两个有序链表

    21.合并两个有序链表 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] ...

  6. 【每日一算法】 合并两个有序链表

    微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...

  7. 【Java】leetCode 21 合并两个有序链表

    题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...

  8. 合并两个有序链表分析

    合并两个有序链表: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: l1 l2 输入:1->2->4, 1->3->4 ...

  9. 《LeetCode力扣练习》第21题 合并两个有序链表 Java

    <LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...

最新文章

  1. breeze源码阅读心得
  2. Linux zip 加密压缩
  3. 【摩天好课】数字时代职业生涯规划
  4. 四十一、Vue项目上手 | 用户管理系统 实现用户修改和删除功能(完成篇)
  5. Win11任务栏大小怎么更改
  6. git、github的基本使用
  7. [Vue.js]实战 -- 电商项目(五)
  8. WPF 去除头部,实现拖动
  9. mysql 重启数据库实例_mysql 单机多实例重启数据库服务
  10. supermap iserver端口介绍
  11. 操作数据库(增删改)
  12. 河南自考本科英语可用计算机代替,河南:自学考试改革方案出炉 专业课可代替英语课程...
  13. “萝卜快跑”,“快”不起来——百度Robotaxi试乘体验
  14. 淘宝接口 http://ip.taobao.com/service/getIpInfo.php?ip=myip 获取不到手机ip地址
  15. w3c标准语言,W3C标准 - W3C中国
  16. [生命科学] snapgene 构建载体方法分享
  17. 蓝桥杯练习题十四 - 次数差(c++)
  18. ip-纯真库:批量获取ip归属地
  19. 文本相似度的几种计算方式
  20. 查询除某一列外的所有列的数据

热门文章

  1. 计算机应用基础2019年12月所有题,2019年12月网络教育统考《计算机应用基础》复习题(九)...
  2. vue实现仿阿里云官网的ace-view-fullColumn模块
  3. 用java写个记账本,融会贯通你的J2SE(一)java实战项目 Java项目
  4. 会做饭,擅长烹饪,会给你的工作生活带来怎样的不同?
  5. 到底什么是范数?什么是0范数、1范数、2范数?区别又是什么?
  6. RiskCloud干货 | 对LOPA分析软件的深入研究
  7. FFmpeg源码分析:音频滤镜介绍(上)
  8. [2019牛客多校训练第3场]Median
  9. 佛祖保佑永无BUG python版本
  10. Android各系统之间的新特性