1、题目描述

  输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

2、代码实现

 1 package com.baozi.offer;
 2
 3 /**
 4  * @author BaoZi
 5  * @create 2019-07-11-16:14
 6  */
 7 public class Offer13 {
 8     public static void main(String[] args) {
 9         ListNode n1 = new ListNode(1);
10         ListNode n2 = new ListNode(2);
11         ListNode n3 = new ListNode(4);
12         ListNode n4 = new ListNode(6);
13         ListNode n5 = new ListNode(8);
14         ListNode n6 = new ListNode(10);
15         n1.next = n2;
16         n2.next = n3;
17         n3.next = n4;
18         n4.next = n5;
19         n5.next = n6;
20         n6.next = null;
21
22         ListNode l1 = new ListNode(1);
23         ListNode l2 = new ListNode(3);
24         ListNode l3 = new ListNode(5);
25         ListNode l4 = new ListNode(7);
26         ListNode l5 = new ListNode(9);
27         ListNode l6 = new ListNode(11);
28         l1.next = l2;
29         l2.next = l3;
30         l3.next = l4;
31         l4.next = l5;
32         l5.next = l6;
33         l6.next = null;
34         Offer13 offer13 = new Offer13();
35         ListNode merge = offer13.Merge(l1, n1);
36         ListNode temp = merge;
37         while (temp != null) {
38             System.out.print(temp.val + "    ");
39             temp = temp.next;
40         }
41     }
42
43     public ListNode Merge(ListNode list1, ListNode list2) {
44         //首先进行特殊情况的判断,并且只有当两个链表都为空的时候才会返回null
45         if (list1 == null && list2 == null) {
46             return null;
47         }
48         //创建一个新的链表头节点,该链表中存放的元素就是两个给定链表合并之后的元素
49         ListNode head = new ListNode(-1);
50         ListNode head_temp = head;
51         //定义两个指针分别指向两个给定的链表list1和list2
52         ListNode temp1 = list1;
53         ListNode temp2 = list2;
54         //当两个临时指针都不为空的时候
55         while (temp1 != null && temp2 != null) {
56             //这里使用的是尾插法创建链表
57             if (temp1.val <= temp2.val) {
58                 ListNode temp = temp1.next;
59                 head_temp.next = temp1;
60                 head_temp = head_temp.next;
61                 temp1 = temp;
62             } else {
63                 ListNode temp = temp2.next;
64                 head_temp.next = temp2;
65                 head_temp = head_temp.next;
66                 temp2 = temp;
67             }
68         }
69         //这种情况是当list2已经遍历完了但是list1还没有遍历完,这时候还需要把list1剩余部分全部添加到新链表的后面
70         if (temp1 != null) {
71             head_temp.next = temp1;
72         }
73         //这种情况是当list1已经遍历完了但是list2还没有遍历完,这时候还需要把list2剩余部分全部添加到新链表的后面
74         if (temp2 != null) {
75             head_temp.next = temp2;
76         }
77         //因为创建的头节点只是为了方便操作,所以在最后输出返回值的时候需要去掉
78         return head.next;
79     }
80 }

转载于:https://www.cnblogs.com/BaoZiY/p/11170899.html

剑指Offer——合并两个排序的链表相关推荐

  1. 剑指 Offer合并两个排序的链表

    题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  2. java listnode 合并链表_剑指offer:合并两个排序的链表(Java)

    1.问题描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 2.思路 方法1:非递归方法 根据题目这个很类似排序中的外排过程,两个数组分别排好序,然后再 ...

  3. 剑指Offer25 合并两个排序的链表

    剑指Offer 25. 合并两个排序的链表 剑指Offer 25. 合并两个排序的链表 这题是一道简单题,如果学习了数据结构当中的链表的话,可以很轻松就想出解题过程: /*** Definition ...

  4. 剑指offer-17.合并两个排序的链表

    https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&tPage= ...

  5. 剑指offer 合并2个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解决方案: 用递归的思想. /* public class ListNode {int val; ...

  6. python数据结构剑指offer-合并两个排序的链表

    合并两个排序的链表 描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的. 数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le ...

  7. 剑指offer25-合并两个排序的链表

    问题描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  8. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

  9. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

最新文章

  1. Case when then esle end
  2. 两个构件的重合点_初三物理易错点:你被眼睛欺骗了,那些『平面镜成像』中的困惑...
  3. Java sdk 调用淘宝开发平台
  4. 噪声调频 matlab,如何用matlab编写噪声调频干扰信号
  5. html-iframe内联框架
  6. 1313. 解压缩编码列表
  7. Ruby编程语言学习笔记4
  8. 经典分享:一份高达555页的技术PPT会是什么样子?
  9. EF更新指定字段...
  10. 【python】Python基础语法及规范
  11. [转]学习object-c,补习一下指针
  12. 瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小
  13. Java猜数字小游戏
  14. Ping/Pong Buffer in ARINC429 Block transmitting Mode
  15. ASP.NET入门基础教程查看
  16. 文科专业考计算机专业研究生,跨专业文科生考计算机研究生的经验
  17. 宇宙各种定律,也许可以改变你的命运。
  18. 自制COREXY结构的3D打印机
  19. 栈内存 堆内存 (数据类型间的存储区别)
  20. c语言汉诺塔问题用指针变量,谁会用C语言解决汉诺塔问题?请进,最好把每一步的解释写上有三个 爱问知识人...

热门文章

  1. [Linux]lnmp一键安装包,访问yii/tp5/laravel的时候,报错500或者空白页面
  2. HTML5 localStorage本地存储
  3. MySql优化的方法
  4. 2015总结 2016展望
  5. Android清单文件详解(三)----应用程序的根节点application
  6. TechEd China 2009 课程幻灯片和代码下载 - MBL311 SQL Server Compact 终极性能调校
  7. SQL2005EXPRESS查询关键字出现次数的代码(比常规方法快5倍)
  8. 计算机组成原理学习1习题1
  9. 一套简约漂亮的响应式博客园主题皮肤分享给你们(一)
  10. mysql 完整的增删改查 和单表查询