栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

递归/回溯 2021-10-21

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

递归/回溯 2021-10-21

21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
过程解析:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //暴力解法,逐一比较取最小值
        //引入一个哑结点,值为-1
        ListNode prehead=new ListNode(-1);
        
        ListNode pre=prehead;
        while(l1!=null&&l2!=null){
            if(l1.val 

结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.9 MB, 在所有 Java 提交中击败了27.68%的用户
通过测试用例:208 / 208

206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
提示:链表中节点的数目范围是 [0, 5000];-5000 <= Node.val <= 5000
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:
输入:head = [1,2]
输出:[2,1]

示例 3:
输入:head = []
输出:[]
过程解析:

方法一:迭代

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode s=head;
        ListNode u=null;
        ListNode v=null;
        
        while(s!=null){
            //记录当前节点的下一个节点
            u=s.next;
            //将当前节点指向v
            s.next=v;
            //s和v同时向右移动
            v=s;
            s=u;
        }
        return v;

    }
}

结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.4 MB, 在所有 Java 提交中击败了14.29%的用户
通过测试用例:28 / 28

方法二:递归

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode rehead=reverseList(head.next);
        head.next.next=head;
        //注意,head的下一个节点一定要指向空
        head.next=null;
        return rehead;
    }
}

结果:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.6 MB, 在所有 Java 提交中击败了5.09%的用户
通过测试用例:28 / 28

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号