• [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;
            }
        }
    }
    
  • 相关阅读:
    Java 单链表的倒置
    Android查询:模拟键盘鼠标事件(adb shell 实现)
    安卓 发送短信两种方式
    java tcp socket实例
    Java中读取某个目录下的所有文件和文件夹
    Android剖析和运行机制
    linux下搭建android NDK开发环境
    把log存起来
    判断Android系统net和wap接入点的开发实例
    android 4.0.4系统下实现apk的静默安装和启动
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860029.html
Copyright © 2020-2023  润新知