yub‘s Algorithmic Adventures_Day5

news2024/10/5 8:55:41

Day5

反转链表

link:206. 反转链表 - 力扣(LeetCode)

思路分析

与数组不同,链表没必要定义新的链表进行存储【对内存空间的浪费】
直接改变next指针即可.
注意头节点指向的下一个节点为null

双指针法
class Solution {
    public ListNode reverseList(ListNode head) {
        //双指针操作 
        ListNode prev = null;
        ListNode cur = head;
        //记录节点
        ListNode temp = null;
        while(cur != null) {
            temp = cur.next;//保存下一个节点
            cur.next = prev;
            //赋值之后整体向后移动
//注意先移动prev 不如cur已经移动后记录不到prev新的位置
            prev = cur;
            cur = temp;
        }
        return prev;
    }
}
递归法

和双指针法是一样的逻辑【升华版】

class Solution {
    public ListNode reverseList(ListNode head) {
      //prev -> null 初始化 head反转的第一个节点 启动反转操作
        return reverse(null, head);
    }
    private ListNode reverse(ListNode prev, ListNode cur) {
        if(cur == null) {
            return prev;
        }
        ListNode temp = null;
        temp = cur.next;
        cur.next = prev;
        //更新prev和cur的位置
        return reverse(cur,temp);
    }
}

//从后向前递归
class Solution{
    ListNode reverseList(ListNode head) {
        //边缘条件判断
        if(head == null) return null;
        if(head.next == null) return head;

        //递归调用 翻转头节点之后的链表
        ListNode last = reverseList(head.next);
        //翻转头节点之后链表的指向
        head.next.next = head;
        //此时的head节点为尾节点, next需要指向null
        head.next = null;  
        return last;
    }
}
两两交换链表中的节点

link:24. 两两交换链表中的节点 - 力扣(LeetCode)

思路分析

注意在交换之前要先存储需要的值

递归
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
        ListNode next = head.next;
        //进行递归
        ListNode newNode = swapPairs(next.next);

        //交换
        next.next = head;
        head.next = newNode;

        return next;
    }
}
虚拟头节点

img

我们想实现的是1和2交换,3和 4交换,此时很难不想到借用中间变量实现,不用递归实现【每次单独处理头节点】更优雅.
注意5后面是空指针就不用交换
判断next.next不为空是为了防止空指针异常

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prev = dummy;

    while (prev.next != null && prev.next.next != null) {
      ListNode temp = head.next.next; // 缓存 next
      prev.next = head.next;          // 将 prev 的 next 改为 head 的 next
      head.next.next = head;          // 将 head.next(prev.next) 的next,指向 head
      head.next = temp;               // 将head 的 next 接上缓存的temp
      prev = head;                    // 步进1位
      head = head.next;               // 步进1位
    }
    return dummy.next;
    }
}
p
      prev = head;                    // 步进1位
      head = head.next;               // 步进1位
    }
    return dummy.next;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

杂谈c语言——6.浮点数的存储

1.浮点数在内存中的存储 常⻅的浮点数&#xff1a;3.14159、1E10等&#xff0c;浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表⽰的范围&#xff1a; float.h 中定义 1.1 练习 #include<stdio.h>int main() {int n 9;float* pFloat (floa…

Golang | Leetcode Golang题解之第456题132模式

题目&#xff1a; 题解&#xff1a; func find132pattern(nums []int) bool {candidateI, candidateJ : []int{-nums[0]}, []int{-nums[0]}for _, v : range nums[1:] {idxI : sort.SearchInts(candidateI, 1-v)idxJ : sort.SearchInts(candidateJ, -v)if idxI < idxJ {ret…

智能视界·大模型驱动视频矩阵管理系统

开头先配两张ER图 一张不带字段&#xff0c;一张带字段&#xff0c;剩下的内容按需拿取 1.产品介绍 产品名称&#xff1a; 智能视界大模型驱动视频矩阵管理系统 主要功能&#xff1a; 智能视频分析与识别 功能介绍&#xff1a;该系统集成先进的人工智能大模型&#xff0c;能…

热轧钢带缺陷数据集,Xsteel表面缺陷数据集(X-SDD),其中包含七种典型的热轧带钢缺陷类型,共有1360个缺陷图像。

热轧钢带缺陷数据集&#xff0c;称为Xsteel表面缺陷数据集&#xff08;X-SDD&#xff09;&#xff0c;其中包含七种典型的热轧带钢缺陷类型&#xff0c;共有1360个缺陷图像。与常用的NEU表面缺陷数据库&#xff08;NEU-CLS&#xff09;的六种缺陷类型相比&#xff0c;X-SDD包含…

Ray_Tracing_The_Next_Week

1动态模糊 动态模糊在摄影中就是快门的速度慢&#xff0c;捕捉光的时间长&#xff0c;物体运动时进行捕捉成像&#xff0c;拍出来的结果是这个运动过程每一帧的平均值 我们的思路是&#xff1a; 每一条光线都拥有自己存在的一个时间点。随着时间变化随机生成光线,一般来说我…

全新芒果YOLOv10改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 2023

💡本篇内容:芒果YOLOv10改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 2023 **具有跨空间学习的高效多尺度注意力模块EMA | 即插即用 该模块通常包括多个并行的注意力子模块,每个子模块关注于输入数据的不同尺度或分辨率。这些子模块…

Study-Oracle-10-ORALCE19C-RAC集群维护

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、RAC的逻辑架构与进程 1、RAC 与单实例进程的对比 2、RAC相关进程功能 3、在主机查看RAC进程 其他的不列举了 4、RAC集群启停命令 检查集群状态 ORACLE 19C …

2-112基于matlab的协同干扰功率分配模型

基于matlab的协同干扰功率分配模型&#xff0c;带操作界面的功率分配GUI&#xff0c;可以实现对已有功率的分配优化&#xff0c;可以手动输入参数值。4个干扰山区分二批总干扰功率&#xff0c;每个扇区包括威胁总系数、综合压制概率、目标函数增量等。程序已调通&#xff0c;可…

无源有损耗导电介质的平面电磁波——复数介电常数带来复波数k(导致幅度衰减)和复波阻抗(带来磁场电场相位不同)

推导中以εμσ是实数为假设 注意在线性介质中J 0和σ等于0其实是一个条件&#xff0c;因为J σE 线性介质的麦克斯韦方程 线性介质无源无损耗条件下 线性介质无源有损耗导电介质下 无源有损耗的复数麦克斯韦方程组&#xff0c;只有方程二与无源无损耗的麦克斯韦方程组不同…

【Linux】使Ubuntu自适应窗口大小并与主机共享文件

LInux虚拟机版本ubuntu-20.04.6&#xff0c;VM版本VMware Workstation 17 Pro VMware Tools™ 是一组服务和模块&#xff0c;是VMware公司在其虚拟化平台中提供的一套工具集&#xff0c;旨在提高虚拟机的性能和稳定性。它们支持 VMware 产品中的多种功能特性&#xff0c;有助于…

TX-LCN框架 分布式事务

一、三种事务模式 1&#xff09;LCN 基于XA协议&#xff0c;事务提交或回滚的操作由事务管理服务器统一告诉它管理的多个项目&#xff0c;也就是说在A事务&#xff0c;B事务的事务提交操作或回滚操作都是在同一时刻发生&#xff0c;并且要么都提交&#xff0c;要么都回滚。 LCN…

.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms

前言 今天大姚给大家分享一个.NET开源、跨平台桌面和移动应用的统一框架&#xff1a;Eto.Forms。 项目介绍 Eto.Forms是一个.NET开源、跨平台的桌面和移动应用的统一框架&#xff0c;该框架允许开发者使用单一的UI代码库构建在多个平台上运行的应用程序&#xff0c;并利用各…

如何修改银河麒麟高级服务器操作系统修改网卡名称(如从ens33到eth0)

如何修改银河麒麟高级服务器操作系统修改网卡名称&#xff08;如从ens33到eth0&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 查找并修改配置文件&#xff1a; 使用ifconfig查看网卡名称&#xff08;如enp1s0&#xff09;。找…

小白快速上手 Docker 03 | Docker数据卷

数据卷 在前面使用Docker时&#xff0c;可能会遇到以下几个问题&#xff1a; 当Docker 里的容器挂了以后打不开&#xff0c;这时候只有删除该容器了&#xff0c;但删除容器会连容器中的产生的数据也一起删除了&#xff0c;大部分场景下这是不能接受的。Docker容器与容器之间不…

【D3.js in Action 3 精译_028】3.4 小节 DIY 实战:使用 Observable 在线绘制 D3 条形图

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解

目录 写在前面 使用方法 相关代码 写在前面 最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用&#xff0c;就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能&#xff0c;于是自己在练习时就想到了用…

【DataLoom】智能问数 - 自然语言与数据库交互

探索DataLoom的智能问数功能&#xff1a;简化数据库查询 在数据驱动的决策制定中&#xff0c;数据库查询是获取洞察的关键步骤。但是&#xff0c;传统的数据库查询方法往往复杂且技术性强&#xff0c;这限制了非技术用户的使用。DataLoom的智能问数功能正是为了解决这一问题而…

【WebGis开发 - Cesium】如何确保Cesium场景加载完毕

目录 引言一、监听场景加载进度1. 基础代码2. 加工代码 二、进一步封装代码1. 已知存在的弊端2. 封装hooks函数 三、使用hooks方法1. 先看下效果2. 如何使用该hooks方法 三、总结 引言 本篇为Cesium开发的一些小技巧。 判断Cesium场景是否加载完毕这件事是非常有意义的。 加载…

Spring Boot中线程池使用

说明&#xff1a;在一些场景&#xff0c;如导入数据&#xff0c;批量插入数据库&#xff0c;使用常规方法&#xff0c;需要等待较长时间&#xff0c;而使用线程池可以提高效率。本文介绍如何在Spring Boot中使用线程池来批量插入数据。 搭建环境 首先&#xff0c;创建一个Spr…

自动驾驶系列—颠覆未来驾驶:深入解析自动驾驶线控转向系统技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…