21. Merge Two Sorted Lists
题目来自于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相关推荐
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- 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 ...
- 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...
- 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 ...
- 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 ...
- 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 ...
- [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 ...
- leetcode python3 简单题21. Merge Two Sorted Lists(Linked)
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二十一题 (1)题目 英文: Merge two sorted linked li ...
- [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 ...
- 21 Merge Two Sorted Lists(两链表归并排序Easy)
题目意思:对两个递增链表进行归并排序 思路:没什么好说的,二路归并 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { ...
最新文章
- Netty傻瓜教程(五):不能不谈Redis
- 安装kvm的服务器开启vnc连接其虚拟机
- python:将时间戳转换成格式化日期
- springmvc 配置aop
- php curl get 微信文章,微信公众号开发:获取 access_token 的两种方式 cURL 函数 和 file_get_contents 函数...
- java继承案例分析,Java day5【第十四章】继承案例分析
- 十大排序算法----堆排序(最后一个非叶子节点的序号是n/2-1的推理)
- MATLAB卷积运算(conv)
- 冯诺依曼机器人_人工智能 | 从智能家电到机器人,从谷歌大脑到人类
- 基于SSM的订餐管理系统
- mysql 1.4安装步骤_1.4.1 MySql安装配置
- php量表是什么心理量表,气质类型量表——计分标准
- 停车位检测方法研究综述
- 【题解】[POI2006」Tet-Tetris 3D
- 【用户运营】滴滴出行活动策划、用户成长体系、用户增长逻辑分析
- 查尔姆斯理工计算机教授,瑞典查尔姆斯理工大学王二刚教授系统评述:供体-受体型三元共轭聚合物实现高效太阳能电池器件构筑...
- win7c盘空间越来越小:C盘哪些文件可以清理删除呢
- 视频剪裁尺寸和裁剪时间
- vue搜索关键字标红
- 牛客小白月赛25 C.白魔法师
热门文章
- webservice用完关闭连接_解决调用WebService报基础连接已经关闭: 服务器关闭了本应保持活动状态的连接的错误的方法...
- 环形队列PHP,环形队列 - Go语言中文网 - Golang中文社区
- mysql 1418 错误原因及解决
- 优秀设计师必备:视觉传达设计与视觉思维
- spring boot 邮件端口_1 分钟教会你用 Spring Boot 发邮件
- rhel配置磁盘分区_rhel配置磁盘分区_centos系统三套硬盘分区方案[图文设置版]
- 米兔点读笔点读包_小米米兔点读笔评测:养成教育只要轻松一点
- Java设计模式(六):命令设计模式
- mysql创建函数1418_Mysql中创建函数报“ERROR 1418 ”的解决方法
- python质数判断if isprime_使用Python判断质数(素数)的简单