题目来自于leetcode,要求是将两个已经有序的链表拼接成一个有序的链表,链表结构如下:

public class ListNode{int val;ListNode next;ListNode(int x){val=x;}}

示意图如下,一个长方形成为节点,一个链表至少有一个节点。

方法一:首先创建一个新的链表L,比较了L1和L2当前结点的Val,小的加入到L中,同时将节点向后移,

    直到有一个链表为空。最后将另一个非空的链表添加到L即可。时间复杂度为O(n+m).

    Header:新链表的头节点,pre作为当前链表的最后一个节点,具体步骤如下:

    1.判断L1和L2其中一个是否为空,若有为空,执行3,否则执行2

    2.比较L1和L2的Val值,小的添加到pre节点的后面,并向右移动一个节点(ListNode=ListNode.next,注意此时链表ListNode已经发生改变了),

    同时pre指向Header链表的最后一个。执行1.

    3.若L1不为空,则将L1添加到pre的后面。若L2不为空则将L2添加到pre节点的后面。

    具体实现代码如下:

public ListNode mergeTwoLists(ListNode l1, ListNode l2){ListNode header=new ListNode(0);ListNode pre=header;while(l1!=null&&l2!=null){if(l1.val>l2.val){pre.next=l2;l2=l2.next;}else{pre.next=l1;l1=l1.next;}pre=pre.next;}if(l2!=null){pre.next=l2;}if(l1!=null){pre.next=l1;}return header.next;}

方法二:由于L1和L2已经是有序了,所以可以考虑将L2插入到L1中,这里只讲插入操作怎么进行,具体过程看java代码

    

    Header 任然为头结点,pre为当前节点的末节点,,红线代表需要修改的指向,绿线代表需要删除的指向

,现在考虑L2的Val比L1小的情况,

    插入步骤如下:

    1。保留L2下一个节点为next

    2.修改L2下一个节点的指向为pre指向的下个节点

    3.修改pre指向的节点为L2

    4.将pre和L2各自向右移动一个节点

    具体代码如下:

public ListNode mergeTwoLists(ListNode l1, ListNode l2){ListNode helper=new ListNode(0);ListNode pre=helper;helper.next=l1;while(l1!=null&&l2!=null){if(l1.val>l2.val){ListNode next=l2.next;l2.next=pre.next;pre.next=l2;l2=next;}else{l1=l1.next;}pre=pre.next;}if(l2!=null){pre.next=l2;}return helper.next;}

 方法3:采用递归的思想,若将函数看成求两个链表当前较小的节点,递归结束为两个链表中有一个为null。

    步骤一:1.创建一个节点header为L1和L2较小的节点

        2.创建一个中间变量nonheader为L1和L2较大的节点

·         3.将header下个节点指向递归函数的返回结果,但此时传参中header已经向右移动了一个单位

   

  代码如下:

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1==null) return l1;if(l2==null) return  l2;ListNode head=(l1.val<l2.val)?l1:l2;ListNode nonhead=(l1.val<l2.val)?l2:l1;head.next=mergeTwoLists(head.next,nonhead);return  head;}

这三种方法都可以实现,总体效果最好的时递归的方法。如有纰漏,希望能得到大家的帮助。

转载于:https://www.cnblogs.com/bufferflies/p/7644347.html

21. Merge Two Sorted Lists相关推荐

  1. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  2. Leetcode 21:Merge Two Sorted Lists(golang实现合并两条已经排序的链表)

    21.Merge Two Sorted Lists 题目链接:题目链接 Merge two sorted linked lists and return it as a new list. The n ...

  3. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

    21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...

  4. LeetCode 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  5. leetcode 21 Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  6. Leet Code OJ 21. Merge Two Sorted Lists [Difficulty: Easy]

    题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...

  7. [LeetCode] 21. Merge Two Sorted Lists ☆

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  8. leetcode python3 简单题21. Merge Two Sorted Lists(Linked)

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二十一题 (1)题目 英文: Merge two sorted linked li ...

  9. [swift] LeetCode 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  10. 21 Merge Two Sorted Lists(两链表归并排序Easy)

    题目意思:对两个递增链表进行归并排序 思路:没什么好说的,二路归并 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { ...

最新文章

  1. Netty傻瓜教程(五):不能不谈Redis
  2. 安装kvm的服务器开启vnc连接其虚拟机
  3. python:将时间戳转换成格式化日期
  4. springmvc 配置aop
  5. php curl get 微信文章,微信公众号开发:获取 access_token 的两种方式 cURL 函数 和 file_get_contents 函数...
  6. java继承案例分析,Java day5【第十四章】继承案例分析
  7. 十大排序算法----堆排序(最后一个非叶子节点的序号是n/2-1的推理)
  8. MATLAB卷积运算(conv)
  9. 冯诺依曼机器人_人工智能 | 从智能家电到机器人,从谷歌大脑到人类
  10. 基于SSM的订餐管理系统
  11. mysql 1.4安装步骤_1.4.1 MySql安装配置
  12. php量表是什么心理量表,气质类型量表——计分标准
  13. 停车位检测方法研究综述
  14. 【题解】[POI2006」Tet-Tetris 3D
  15. 【用户运营】滴滴出行活动策划、用户成长体系、用户增长逻辑分析
  16. 查尔姆斯理工计算机教授,瑞典查尔姆斯理工大学王二刚教授系统评述:供体-受体型三元共轭聚合物实现高效太阳能电池器件构筑...
  17. win7c盘空间越来越小:C盘哪些文件可以清理删除呢
  18. 视频剪裁尺寸和裁剪时间
  19. vue搜索关键字标红
  20. 牛客小白月赛25 C.白魔法师

热门文章

  1. webservice用完关闭连接_解决调用WebService报基础连接已经关闭: 服务器关闭了本应保持活动状态的连接的错误的方法...
  2. 环形队列PHP,环形队列 - Go语言中文网 - Golang中文社区
  3. mysql 1418 错误原因及解决
  4. 优秀设计师必备:视觉传达设计与视觉思维
  5. spring boot 邮件端口_1 分钟教会你用 Spring Boot 发邮件
  6. rhel配置磁盘分区_rhel配置磁盘分区_centos系统三套硬盘分区方案[图文设置版]
  7. 米兔点读笔点读包_小米米兔点读笔评测:养成教育只要轻松一点
  8. Java设计模式(六):命令设计模式
  9. mysql创建函数1418_Mysql中创建函数报“ERROR 1418 ”的解决方法
  10. python质数判断if isprime_使用Python判断质数(素数)的简单