1.题目描述:

2.解题思路:

  本题是要合并两个已经有序的单链表,思路很简单,有两种方法:非递归和递归。

3.Java代码:

(1)非递归:

  为方便操作,定义一个辅助的头节点,然后比较原来两个链表的头节点,将小的那一个加入到合并链表,最后,当其中一个链表为空时,直接将另一个链表接入到合并链表即可。

 //public class LeetCode21 为测试
public class LeetCode21 {
public static void main(String[] args) {
ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
m1.next=m2;
m2.next=m3;
System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
n1.next=n2;
n2.next=n3;
System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
ListNode result=new Solution().mergeTwoLists(m1, n1);
if(result!=null){
System.out.print("合并链表:"+result.val);
ListNode resultNext=result.next;
while(resultNext!=null){
System.out.print("->"+resultNext.val);
resultNext=resultNext.next;
}
}
}
}
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode fakeHead=new ListNode(0);
ListNode p=fakeHead;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
p.next=l1;
l1=l1.next;
}else{
p.next=l2;
l2=l2.next;
}
p=p.next;
}
if(l1!=null) p.next=l1;
if(l2!=null) p.next=l2;
return fakeHead.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}

测试结果:

(2)递归:

 //public class LeetCode21 为测试
public class LeetCode21 {
public static void main(String[] args) {
ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
m1.next=m2;
m2.next=m3;
System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
n1.next=n2;
n2.next=n3;
System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
ListNode result=new Solution().mergeTwoLists(m1, n1);
if(result!=null){
System.out.print("合并链表:"+result.val);
ListNode resultNext=result.next;
while(resultNext!=null){
System.out.print("->"+resultNext.val);
resultNext=resultNext.next;
}
}
}
}
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null) return l2;
if(l2==null) return l1;
if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next, l2);
return l1;
}else{
l2.next=mergeTwoLists(l1, l2.next);
return l2;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}

测试结果:

  

【LeetCode21】Merge Two Sorted Lists★的更多相关文章

  1. 【leetcode】Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  2. 【leetcode】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 ...

  3. 【leetcode】Merge Two Sorted Lists(easy)

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

  4. 【Leetcode】【Hard】Merge k Sorted Lists

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...

  5. 【leetcode】Merge k Sorted Lists(按大小顺序连接k个链表)

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  6. 【Leetcode】【Easy】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 ...

  7. 【LeeCode23】Merge k Sorted Lists★★★

    1.题目描述: 2.解题思路: 题意:将K个已经排序的链表合并成一个排序的链表,分析并描述所用算法的复杂度. 方法一:基于“二分”思想的归并排序.本文用非递归和递归两种方法实现. (1)非递归:归并排 ...

  8. 【LeetCode】Merge Two Sorted Lists(合并两个有序链表)

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

  9. 【LeetCode-easy】Merge Two Sorted Lists

    思路:指针p用于串联怎个链表,比较两个指针的大小,连接较小的一个.如果一个链表到达链尾,连接另外一个链表余下来的所以节点. public ListNode mergeTwoLists(ListNode ...

随机推荐

  1. 在JavaScript文件中用ajax方法实现省市区的三级联动

    1.JavaScript Document $(document).ready(function(e) { 加载三个下拉列表 $("#sanji").html("< ...

  2. JavaScript写计算器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. python 元组编码和解码问题

    先看一个例子: (u'agentEnum', True, '200', {u'msg': u'\u6210\u529f', u'code': 1}) 在2.7.15版本中,如果有下面代码: def f ...

  4. 记一款bug管理系统(bugdone.cn)的开发过程(1) -- 为什么要开发一款bug开发系统

    对于从事软件研发行业的同学来说bug管理系统肯定不陌生.本人03年左右开始正式成为一名码农,工作期间接触过若干bug管理系统,如JIRA等,不过都是自行部署在公司内网的. 几年过去了,现在已经是互联网 ...

  5. [转载]Buffer cache的调整与优化

    Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的free buffer waits事件.下面将具体描 ...

  6. The Downside of MySQL Auto-reconnect

    A few days ago I was doing some cleanup on a passive master database using the MySQL client. I didn’ ...

  7. MySQL MTS复制: hitting slave_pending_jobs_size_max

    测试步骤: 从库停止复制:stop slave; 主库创建大表400万条记录. 开启从库复制:start slave; 监测从库error log持续输出: 2018-12-06T10:40:52.6 ...

  8. zabbix待完整

    fad 下载zabbix3.4的配置文件 wget -O zabbix-3.4.2.tar.gz http://sourceforge.net/projects/zabbix/files/ZABBIX ...

  9. MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案

    文件组的基本知识点介绍完毕后,根据场景引入中的内容,我们将利用SQL Server文件组技术来实现冷热数据隔离备份的方案设计介绍如下. 设计分析 由于payment数据库过大,超过10TB,单次全量备 ...

  10. 巧用foxmail同步qq邮箱的通讯录

    如果您企业使用的qq企业邮箱,那么你在web端登陆邮箱并填写收件人时,发现QQ邮箱是可以自动完成,并且中文名称自动完成. 如何在使用foxmail邮件客户端的情况下也同步这些邮箱信息呢?需要七步,看截 ...