zoukankan      html  css  js  c++  java
  • LeetCode 8. 合并两个有序链表

    题目描述

    难度:简单

    将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

    示例:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    解题思路

    对于两个有序链表l1:1->5->8l2:2->3->9,

    首先将l4=l3;

    利用一个while循环,遍历l1和l2,

    val比较小的ListNode,则将其赋予给L3.next;直到l1和l2都遍历完成;

    具体过程如下:

    所以l4一开始指向的内存地址是一直不变的,不管l3如何变,l4还是指向一开始指向的位置,所以当l3不断往下走,

    就不断往这段内存里面添加新的对象,l3一直只有一个结点,而l4指向了这段内存的头部,所以拥有多个结点

    这样看来,只使用一条链表来遍历是行不通的,可能到最后只输出一个结点,用两个链表就可以解决这一问题了。

    代码如下

    public class MergeTwoLists {
         public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
             
            if (l1==null&&l2==null) {
                return null;
            }else if (l1==null) {
                return l2;
            }else if (l2==null) {
                return l1;
            }
            ListNode l3=new ListNode(l1.val<l2.val?l1.val:l2.val);
            ListNode l4=l3;
            
             if (l1.val<=l2.val) {
                l1=l1.next;
                if (l1==null) {
                    l4.next=l2;
                }
            }else {
                l2=l2.next;
                if (l2==null) {
                    l4.next=l1;
                }
            } 
            
            while (l1!=null&&l2!=null) {
                if (l1.val<l2.val) {
                    l3.next=new ListNode(l1.val);
                    l3=l3.next;
                    if (l1.next!=null) {
                        l1=l1.next;
                    }else {
                        l3.next=l2;
                        l3=l3.next;
                        break;
                    }
                }else {
                    l3.next=new ListNode(l2.val);
                    l3=l3.next;
                    if (l2.next!=null) {
                        l2=l2.next;
                    }else {
                        l3.next=l1;
                        l3=l3.next;
                        break;
                    }
                }    
            }
    
             return l4;
    
            }
         
         class ListNode {
                 int val;
                ListNode next;
             ListNode(int x) { val = x; }
         }
    }

    执行结果

    通过
    执行用时 :1 ms, 在所有 Java 提交中击败了85.56%的用户
    内存消耗 :38.6 MB, 在所有 Java 提交中击败了45.60%的用户
  • 相关阅读:
    网络基础相关知识内容
    json模块的转义dump 和反转义 loap
    常用模块--time,sys,os,json
    正则表达式
    day_24 模块和包
    day23_内置函数(__del__ item系列 ,模块)
    LuoguP3806 【模板】点分治1 (点分治)
    BZOJ1305/Luogu3153 [CQOI2009]dance跳舞 (network flow)
    LuoguP2217 [HAOI2007]分割矩阵 (DP + memorized search)
    BZOJ3224/LuoguP3369 普通平衡树 (splay)
  • 原文地址:https://www.cnblogs.com/Transkai/p/12378735.html
Copyright © 2011-2022 走看看