• 将两个有序链表合并为一个新的有序链表并返回


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

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

    从两个有序链表的第一个结点开始比较,val值小的结点尾插入结果链表。
    具体实现:

    定义变量
    (1)定义变量 cur1,cur2 分别表示两个链表;
    (2)定义一个新链表 result 作为结果链表;
    (3)val值小的结点要尾插入结果链表,则必须知道结果链表的最后一个结点; 定义变量 last;
    如果链表 cur1 为空,则直接返回 cur2;
    如果链表 cur2 为空,则直接返回 cur1;
    如果两个链表都为空,则执行任意一句代码即可;
    cur1 == null; return cur2;
    cur2 == null; return cur1
    如果两个链表都不为空,开始遍历
    (1)cur1.val <= cur2.val,把cur1尾插入结果链表;
    (2)cur1.val > cur1.val,把cur2尾插入结果链表;
    当遍历不满足cur1 != null 且 cur2 != null时退出循环,此时必有一个链表为空。
    (1)cur1 == null时,则cur2中剩下的所有结点都直接插入结果链表,即:last.next = cur2;

    (2)cur2 == null时,则cur2中剩下的所有结点都直接插入结果链表,即:last.next = cur1;
    返回结果链表 :return result;
    实现代码:

    package www.fanfan.com;
    
    /**
     * author:kelly_fanfan
     */
    public class LeetCode21 {
        class ListNode {
            private int val;
            private ListNode next;
    
            public ListNode(int val) {
                this.val = val;
                this.next = null;
            }
        }
        class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode cur1 = l1;
            ListNode cur2 = l2;
            ListNode result = null;
            ListNode last = null;
            if(cur1 == null){
                return cur2;
            }
            if(cur2 == null){
                return cur1;
            }
            while(cur1 != null && cur2 != null){
                if(cur1.val <= cur2.val){
                    ListNode next = cur1.next;
                    cur1.next = null;
                    if(result == null){
                        result = cur1;
                    }else{
                        last.next = cur1;
                    }
                    last = cur1;
                    cur1 = next;
                }else{
                    ListNode next = cur2.next;
                    cur2.next = null;
                    if(result == null){
                        result = cur2;
                    }else{
                        last.next = cur2;
                    }
                    last = cur2;
                    cur2 = next;
                }
            }
            if(cur1 != null){
                last.next = cur1;
            }
            if(cur2 != null){
                last.next = cur2;
            }
            return result;
        }
    }
    }
    

      

  • 相关阅读:
    make menuconfig出现乱码
    内存中的变量和值
    is&==
    python小整数池
    生成器
    GIL
    grub rescue问题修复
    期末考试
    期末要求
    选课练习
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/14761224.html
Copyright © 2020-2023  润新知