题目:

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.

题解:

这道题是链表操作题,题解方法很直观。

首先,进行边界条件判断,如果任一一个表是空表,就返回另外一个表。

然后,对于新表选取第一个node,选择两个表表头最小的那个作为新表表头,指针后挪。

然后同时遍历两个表,进行拼接。

因为表已经是sorted了,最后把没有遍历完的表接在新表后面。

由于新表也会指针挪动,这里同时需要fakehead帮助记录原始表头。

代码如下:

 1     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         if(l1==null)
 3             return l2;
 4         if(l2==null)
 5             return l1;
 6             
 7         ListNode l3;
 8         if(l1.val<l2.val){
 9             l3 = l1;
             l1 = l1.next;
         }else{
             l3 = l2;
             l2 = l2.next;
         }
         
         ListNode fakehead = new ListNode(-1);
         fakehead.next = l3;
         while(l1!=null&&l2!=null){
             if(l1.val<l2.val){
                 l3.next = l1;
                 l3 = l3.next;
                 l1 = l1.next;
             }else{
                 l3.next = l2;
                 l3 = l3.next;
                 l2 = l2.next;
             }
         }
         
         if(l1!=null)
             l3.next = l1;
         if(l2!=null)
             l3.next = l2;
         return fakehead.next;
     }

更简便的方法是,不需要提前选新表表头。

对于新表声明两个表头,一个是fakehead,一个是会挪动的指针,用于拼接。同时,边界条件在后面的补拼中页解决了,所以开头没必要做边界判断,这样代码简化为:

 1     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         ListNode fakehead = new ListNode(-1);
 3         ListNode l3 = fakehead;
 4         while(l1!=null&&l2!=null){
 5             if(l1.val<l2.val){
 6                 l3.next = l1;
 7                 l3 = l3.next;
 8                 l1 = l1.next;
 9             }else{
                 l3.next = l2;
                 l3 = l3.next;
                 l2 = l2.next;
             }
         }
         
         if(l1!=null)
             l3.next = l1;
         if(l2!=null)
             l3.next = l2;
         return fakehead.next;
     }

Merge Two Sorted Lists leetcode java的更多相关文章

  1. Merge k Sorted Lists Leetcode Java

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

  2. Merge Two Sorted Lists - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Merge Two Sorted Lists - LeetCode 注意点 两个链表长度可能不一致 解法 解法一:先比较两个链表长度一致的部分,多余的部分 ...

  3. 23. Merge k Sorted Lists - LeetCode

    Question 23. Merge k Sorted Lists Solution 题目大意:合并链表数组(每个链表中的元素是有序的),要求合并后的链表也是有序的 思路:遍历链表数组,每次取最小节点 ...

  4. Merge Two Sorted Lists—LeetCode

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

  5. Merge k Sorted Lists [LeetCode]

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

  6. 蜗牛慢慢爬 LeetCode 23. Merge k Sorted Lists [Difficulty: Hard]

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

  7. Java for LeetCode 023 Merge k Sorted Lists

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

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

  9. [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. 洛谷P2671 求和 [数论]

    题目传送门 求和 格式难调,题面就不放了. 分析: $ZYYS$的一道题. 很显然是大力推公式.我们分析一下题目,实际上限制条件就是:下标同奇偶且颜色相同的数,那么我们先拿这个公式$(x+z)*(nu ...

  2. 在centOS使用systemctl配置启动多个tomcat

    公司服务器使用的是阿里云CentOS7,CentOS7和CentOS6目前最大区别就是service变成了现在的systemctl,简单的查了一下并结合使用,发现systemctl功能上等同于6上面的 ...

  3. Stream中reduce()使用记录

    一.reduce()使用1.第一个参数是我们给出的初值,2.第二个参数是累加器,可以自己用实现接口完成想要的操作,这里使用Bigdecimal的add方法 3.最后reduce会返回计算后的结果 Bi ...

  4. Java double 精度

    1. 范围  float和double的范围是由指数的位数来决定的.  float的指数位有8位,而double的指数位有11位,分布如下:  float:  1bit(符号位) 8bits(指数位) ...

  5. 概率论与数理统计基础<1>:随机事件与随机变量

    Part1. 随机事件 1-1.随机试验 随机试验:可以在相同条件下重复进行,每次试验的结果不止一个,事先知道所有可能的结果但不确定是哪一个的试验. 举例:重复的抛出一枚均匀的硬币就是一个随机试验,事 ...

  6. luoguP4360 [CEOI2004]锯木厂选址

    题目链接 luoguP4360 [CEOI2004]锯木厂选址 题解 dis:后缀和 sum:前缀和 补集转化,减去少走的,得到转移方程 dp[i] = min(tot - sumj * disj - ...

  7. 1265. [NOIP2012] 同余方程

    1265. [NOIP2012] 同余方程 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余 ...

  8. CF961E Tufurama 主席树

    对原问题进行转化 考虑对每个$i$,询问在$j \in [i + 1, a[i]]$中满足$a[j] \geqslant i$的个数 这样子可以做到不重不漏 个数满足差分的性质,使用主席树来维护即可 ...

  9. 【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic

    题意:给你一个棋盘的最终局面. 你的一次操作可以选择一些行和列,将它们的交叉点染黑,不能重复选择某行或者某列.问你是否能经过数次操作之后,达到目标局面. 就枚举所有黑点,如果该点行列都没被标记,就给它 ...

  10. Python学习笔记(二):条件控制语句与循环语句及常用函数的用法

    总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...