题目内容:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

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

题目代码:

(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; }
    }

21. Merge Two Sorted Lists★的更多相关文章

  1. [Leetcode][Python]21: Merge Two Sorted Lists

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 21: Merge Two Sorted Listshttps://oj.le ...

  2. 21. Merge Two Sorted Lists(合并2个有序链表)

    21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...

  3. 21. Merge Two Sorted Lists【easy】

    21. Merge Two Sorted Lists[easy] Merge two sorted linked lists and return it as a new list. The new ...

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

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

  5. leetCode练题——21. Merge Two Sorted Lists(照搬大神做法)

    1.题目 21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new l ...

  6. 刷题21. Merge Two Sorted Lists

    一.题目说明 这个题目是21. Merge Two Sorted Lists,归并2个已排序的列表.难度是Easy! 二.我的解答 既然是简单的题目,应该一次搞定.确实1次就搞定了,但是性能太差: R ...

  7. C# 写 LeetCode easy #21 Merge Two Sorted Lists

    21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...

  8. [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 ...

  9. [leetcode] 21. Merge Two Sorted Lists (Easy)

    合并链表 Runtime: 4 ms, faster than 100.00% of C++ online submissions for Merge Two Sorted Lists. class ...

  10. [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 ...

随机推荐

  1. Android中获得网络状况的实现

    要得知网络状况就是要用networkinfo类这个类名还是把这个类的意思表达的很清晰的,network是网络,info是状况.判断是否有网用到了这个类的IsAvailable方法,这个方法返回的是这个 ...

  2. 机器学习总结(一) Adaboost,GBDT和XGboost算法

    一: 提升方法概述 提升方法是一种常用的统计学习方法,其实就是将多个弱学习器提升(boost)为一个强学习器的算法.其工作机制是通过一个弱学习算法,从初始训练集中训练出一个弱学习器,再根据弱学习器的表 ...

  3. IDEA 初建Spring项目(Hello Spring)

    新建项目 在文件夹中建立一个项目文件 打开项目 打开IDEA,点击Open,根据所建项目路径找到该项目 依赖注入 点击项目名右键,点击new,点击file,创建pom.xml 内容为: <pro ...

  4. zabbix触发器表达式

    zabbix触发器表达式 触发器使用逻辑表达式来评估通过item获取的数据是处于哪种状态, 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<serve ...

  5. 调用Bytom Chrome插件钱包开发Dapp

    安装使用插件钱包 1. 打开Google浏览器的应用商店,搜索Bystore 下载链接:http://t.cn/E6cFFwb 2. 然后点击添加到Chrome,就可以添加到我们的: 3. 使用goo ...

  6. mongodb 数据自动备份

    创建Mongodb数据库备份目录 mkdir -p ~/backup/mongod_bak/mongod_bak_now mkdir -p ~/backup/mongod_bak/mongod_bak ...

  7. Lintcode155-Minimum Depth of Binary Tree-Easy

    155. Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is ...

  8. adb常用命令(转)

    1.Android Debug Bridge -adb常用命令 1.1简介 Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-tools文件 ...

  9. selenium如何屏蔽谷歌浏览器弹出的通知

    使用selenium访问新浪微博的时候  浏览器总会有个通知,需要点击  类似下面这样 下面使用chromeoptions来修改浏览器的设置 from selenium import webdrive ...

  10. 第 10 章 容器监控 - 078 - Docker 最常用的监控方案

    Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...