LeetCodeday04

news2024/9/23 13:22:08

24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

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

public class Leetcode24 {
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4))));
        ListNode result = swapPairs(listNode);
        while (result != null) {
            System.out.print(result.val + " -> ");
            result = result.next;
        }

    }

    /**
     * @param head  1 -> 2 -> 3 -> 4 -> 5 -> null
     * @return      2 -> 1-> 4 -> 3 -> 5 -> null
     */
    public static ListNode swapPairs(ListNode head) {
        // 虚拟头结点
        ListNode dummyHead = new ListNode();
        dummyHead.next = head;
        // 定义一个 cur 指向头结点 移动链表
        ListNode cur = dummyHead;

        // 奇数个节点时 要判断 cur的 next next 不为空
        // 偶数个节点时 要判断 cur的 next 不为空
        while (cur.next != null && cur.next.next != null) {
            ListNode temp;
            //  temp = 1
            temp = cur.next;
            ListNode temp1;
            //因为 cur.next.next 不为空 所以 cur.next.next.next 不会空指针异常
            // temp1 = 3
            temp1 = cur.next.next.next;
            // cur.next -> 2
            cur.next = cur.next.next;
            // 2.next -> 1
            cur.next.next = temp;
            // 1 -> 3
            temp.next = temp1;
            // cur 移动两个位置
            cur = cur.next.next;
        }
        return dummyHead.next;

    }
}

19.删除链表的倒数第N个节点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]

public class Leetcode19 {
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4))));
        ListNode result = removeNthFromEnd(listNode, 2);
        while (result != null) {
            System.out.print(result.val + " -> ");
            result = result.next;
        }
    }

    public static ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummyHead = new ListNode();
        dummyHead.next = head;

        ListNode s = dummyHead;
        ListNode f = dummyHead;

        // 先让快指针走 n 步
        while (n > 0 && f != null) {
            f = f.next;
            n --;
        }

        while (f.next != null) {
            s = s.next;
            f = f.next;
        }
        // 删除节点
        s.next = s.next.next;
        return dummyHead.next;
    }
}

142.环形链表II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

public class Leetcode142 {
    public static void main(String[] args) {
        // 构造环
        ListNode startNode = new ListNode(-1);
        ListNode listNode = new ListNode(1);
        startNode.next = listNode;
        ListNode node1 = new ListNode(5);
        ListNode node2 = new ListNode(6);
        ListNode node3 = new ListNode(7);
        ListNode node4 = new ListNode(8);
        listNode.next = node1;
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = listNode;

        ListNode result = detectCycle(listNode);
        System.out.println(result.val);
    }

    public static ListNode detectCycle(ListNode head) {
        ListNode s = head;
        ListNode f = head;
        while (f != null && f.next != null) {
            // f 走两步
            f = f.next.next;
            // s 走一步
            s = s.next;
            // s == f 相遇了
            if (s == f) {
                //  开始找环入口
                ListNode index1 = f;
                ListNode index2 = head;
                while (index2 != index1) {
                    index1 = index1.next;
                    index2 = index2.next;
                }
                // 循环结束 找到了入口
                return index1;
            }
        }
        return null;
    }
}

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

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

相关文章

JavaScript篇.day08-DOM,节点,事件,定时器,位置及坐标

目录 1.DOM 2.DOM相关操作 (1)获取元素 (2)操作元素 (3)操作元素属性 (4)操作元素类名 (5)操作元素样式 3.节点操作 4.事件 5.事件传播 6.定时器 7.位置及坐标 1.DOM Document Object Model 文档对象模型一整套操作文档流相关内容的属性和方法可以做的操作: 修改样…

前端框架搭建(六)搭建页面框架【vite】

1.安装所需依赖 需要安装 vue-routernaive视图框架 npm npm install vue-router4 yarn yarn add vue-router4npm i -D naive-ui2.搭建naive适配框架 创建文件夹——存放通用组件 在components下创建文件夹common 全局配置常用组件 在之前创建的global.d.ts中添加Window…

枚举的应用

枚举: 在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 [1] 是一个被命名的整型常数的集合,枚举在日常生活…

基于CAS操作的atomic原子类型

原子操作 C A S (compare And Swap)也叫比较交换,是一种无锁原子算法,映射到操作系统就是一条cmpxchg硬件汇编指令(保证原子性),其作用是让CPU将内存值更新为新值,但是有个条件,内存值必须与期望…

站长权重在线查询,怎么查询网站权重是多少?

什么是网站权重 当站长们辛辛苦苦建立起来一个网站,怎么才能知道自己的网站在搜索引擎中的权重情况呢? 对于很多人而言,权重这个词可能听到最多的场景就是淘宝京东店铺权重。淘宝或京东会根据商家网店的浏览量、好评率、转化率、是否…

4A(统一安全管控平台)解析

4A是指帐号(Account)、认证(Authentication)、授权(Authorization)和审计(Audit),4A统一安全管控平台是以身份为中心,实现帐号、认证、授权和审计统一管控的安…

Spark注意事项

一、Spark理解 数据的操作只有两种 大数据领域中对数据的操作只有两种:聚合 & 处理 无论是多华丽算法,最终都是这两个平平无奇的操作组合而成的 action理解 在spark中,一个action操作为一个jobId(在源码中可以看到runjob 是只有在action操作后才会调用) , 所以一个…

Mac内存空间不足导致无法安装Ventura?可用这些方法释放储存空间

安装Macos新版系统Ventura需要非常多的内存空间,本身我们的Mac磁盘空间就掣襟肘见,我们又该如何释放Mac磁盘空间来安装Ventura呢?今日,小编将分享一些能够释放大量Mac内存空间的方法,以便大家能够优化Mac的运行速度外还…

摄影基础笔记

https://www.icourse163.org/learn/UESTC-1001958013?tid1450439527#/learn/content 这里写目录标题景深 焦距 光圈视角快门测光 感光度构图井字曝光色温白平衡光光的强度光的方向色彩色相明度饱和度色相环反差影调手机瞬间后期处理景深 焦距 光圈 当我们把镜头对着一个景物聚…

Annoconda常见用法

打开conda命令行窗口 点击开始,选择A-选择Anaconda里面的prompt 查看环境 conda env list #查看虚拟环境 创建环境 conda create -n 虚拟环境名字 python3.8 #创建虚拟环境 python3.8 指定python版本 激活环境 conda activate 虚拟环境名字 #进入虚拟环境 …

Linux磁盘情况常用查看指令

Linux磁盘情况 磁盘查询 df -h:(disk free)查询磁盘的整体情况。 du -h:(disk usage)查询指定目录的磁盘占用情况,默认为当前目录 -s 指定目录占用大小汇总-h 带计量单位-a 含文件–max-depth1 子目录深度-c 列出明细的同时,增…

【LDF】线性判别函数(二)

感知准则函数 线性可分性 现有 nnn 个 样本: y1,y2,…,yn\mathbf{y}_1, \mathbf{y}_2, \ldots, \mathbf{y}_ny1​,y2​,…,yn​, 这些样本来自于两个类别 ω1\omega_1ω1​ 或 ω2\omega_2ω2​ 。任务: 寻找一个线性判别函数 g(x)aTyg(\mathbf{x})\mathbf{a}^T \mathbf{y}g(…

SpringMVC 入门案例

1.1 添加依赖 在pom文件中添加 javax.servlet-api 和 spring-webmvc 依赖&#xff1b; javax.servlet-api&#xff1a;主要用于 JAVA Web 开发&#xff1b; spring-webmvc&#xff1a;SpringMVC 依赖&#xff1b; <dependencies><dependency><groupId>javax.…

Xilinx ZYNQ 7000 AXI GPIO 读写/中断

打开SDK 后&#xff0c;创建官方例程 打开官方例程后&#xff0c;会发现这个AXI GPIO设置和 PS MIO/EMIO一模一样 int main(void) {int Status;volatile int Delay;/* Initialize the GPIO driver */Status XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);if (Status…

unity-概念与实操入门

文章目录编译器推荐&#xff08;Rider&#xff09;坐标世界坐标系相对坐标系资源商店快捷入口地面制作脚本新建脚本生命周期vs测试打印对象标签&#xff08;自带集合属性&#xff09;图层预设体创建预设体&#xff08;cocos相同&#xff09;定位预设体文件位置预设体添加、更新…

python第一次作业

目录 1.下列程序运行结果为&#xff1a; 2.下列程序运行结果为&#xff1a; 3.下列程序运行结果为&#xff1a; 4.下列程序运行结果为&#xff1a; 5.编写程序&#xff1a;从键盘输入两个两位数&#xff0c;组成一个新的四位数&#xff0c; 6.编写程序功能如下&#xff1a…

网络编程套接字----TCP协议

文章目录前言一、简单TCP网络程序二、TCP socket API 详解socket()bind()listen()accept()connect()三、TCP网络编程头文件日志文件客户端服务器单进程版本多进程版本多线程版本四、线程池版的TCP更改提供的服务总结前言 接着上节课我们讲了udp套接字网络编程,这节课我来给大家…

【C++基础】11:文件操作

文件操作 OVERVIEW文件操作一、文本文件&#xff1a;1.指定打开方式&#xff1a;2.文本文件的写操作&#xff1a;3.文本文件的读操作&#xff1a;二、二进制文件&#xff1a;1.二进制文件的写操作&#xff1a;2.二进制文件的读操作&#xff1a;程序运行时产生的数据都属于临时的…

JAVA设计模式--行为型模式--状态模式

1.状态模式&#xff08;State Pattern&#xff09; 1.1介绍 类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 1.2意图&#xff1a; 允许对象在…

Python数据分析案例16——水质检测(支持向量机)

本次带来图片分类的案例&#xff0c;水质检测。 数据展示 五种类别的水质&#xff0c;图片形式储存的&#xff1a; 前面1是代表水质的类别标签&#xff0c;后面是样本个数。 图片特征构建 import numpy as np import pandas as pd import matplotlib.pyplot as plt import o…