zoukankan      html  css  js  c++  java
  • [leetCode].合并两个有序列表

    在这里插入图片描述

    解法一 暴力解法

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            //处理链表问题可以使用哑节点(哨兵节点)
            ListNode prehead = new ListNode(-1);
            //用一个指针指向这个哑节点
            ListNode prev = prehead;
            //循环条件为l1!=null,l2!=null
            while(l1 != null && l2 != null){
                //比较l1,l2当前节点的大小
                if(l1.val <= l2.val){
                    //将l1加到哑节点的链表上
                    prev.next = l1;
                    //l1指向l1链表上的下一个节点
                    l1 = l1.next;
                }else{
                    //将l2加到哑节点的链表上
                    prev.next = l2;
                    //l2指向l2链表上的下一个节点
                    l2 = l2.next;   
                }
                //无论l1与l2的值谁大,prev指针都要移动到哑节点链表的最后一个节点
                prev = prev.next;
            }
            //循环结束后l1与l2一定有一个为非空,将非空链表拼接到哑节点所在链表的链表尾
            prev.next = l1 == null ? l2 : l1;
            return prehead.next;
        }
    }
    

    解法二 递归

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            //l1.l2存在空链表,则返回非空链表
            if(l1 == null){
                return l2;
            }else if(l2 == null){
                return l1;
            }else if(l1.val <= l2.val){ //如果l1,l2都非空,则比较头节点,将较小的头节点指向子问题返回的链表
                l1.next = mergeTwoLists(l1.next, l2);
                return l1;
            }else{
                l2.next = mergeTwoLists(l1, l2.next);
                return l2;
            }
        }
    }
    
  • 相关阅读:
    二叉树的镜像
    判断树B是不是树A的子结构
    LeetCode-21. Merge Two Sorted Lists
    LeetCode-Reverse Linked List I & II
    LeetCode-Permutations & Permutations II
    Linux常用命令
    Mac OS 快捷键
    Git 常用命令
    SVM参数寻优:grid search
    转载:Normal Equation证明及应用
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860029.html
Copyright © 2011-2022 走看看