刷题篇 - 03

news2024/11/28 16:31:19

题目一:

203. 移除链表元素 - 力扣(LeetCode)

public ListNode removeElements(ListNode head, int val) {
        //1. 如果链表为null,直接返回head
        if (head == null) {
            return head;
        }
        
        //2. 定义快慢指针
        ListNode pre = head;
        ListNode del = pre.next;
        while (pre.next != null) {
            if (del.val == val) {
                pre.next = del.next;
                //del = del.next;
            } else {
                pre = pre.next;
                //del = del.next;
            }
            del = del.next;
        }

        //3. 排查头节点
        if (head.val == val) {
            head = head.next;
        }

        //4. 返回
        return head;
    }

题目二:

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

public ListNode reverseList(ListNode head) {
        //1. 如果链表为null,直接返回head
        if (head == null) {
            return head;
        }

        //2. 正常
        ListNode cur = head.next;//待交换节点

        //3. 将头节点的next置为null
        head.next = null;

        //4. 进行交换
        while (cur != null) {
            //5. 记录待交换节点的下一个节点
            ListNode curN = cur.next;
            cur.next = head;
            head = cur;
            cur = curN;
        }

        //5. 返回
        return head;
    }

题目三:

876. 链表的中间结点 - 力扣(LeetCode)

public ListNode middleNode(ListNode head) {
        //1. 题目提示:链表一定不为null

        //2. 定义快慢指针
        ListNode fast = head;//每次走两步
        ListNode slow = head;//每次走一步
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }

        //3. 返回
        return slow;
    }

题目四:正

面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)

public int kthToLast(ListNode head, int k) {
        //新增条件:k不一定合法

        //1. 如果链表为null,k<=0
        if (head == null || k <= 0) {
            return -1;
        }

        //2. 定义快慢指针
        ListNode fast = head;
        ListNode slow = head;

        //3. 快指针先走k-1步,同时判断k的合法性
        for (int i = 0; i < k - 1; i++) {
            //【解析】:当fast.next == null时,fast不能再继续走了
            //if语句写在前面的原因,如果fast.next == null,往后走了之后
            //fast == null,再进入if语句会造成空指针异常
            if (fast.next == null) {
                return -1;
            }
            fast = fast.next;
        }

        //4. 快慢指针同时走
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }

        //5. 返回
        return slow.val;
    }

题目五:正

21. 合并两个有序链表 - 力扣(LeetCode)

public ListNode mergeTwoLists(ListNode head1, ListNode head2) {
        //1. 定义傀儡节点
        ListNode head = new ListNode(-1);
        ListNode cur = head;

        //2. 开始拼接
        while (head1 != null && head2 != null) {
            if (head1.val < head2.val) {
                cur.next = head1;
                head1 = head1.next;
            } else {
                cur.next = head2;
                head2 = head2.next;
            }
            cur = cur.next;
        }

        //3. 根据出循环的原因分别作出反应(即使两个链表都为空也没关系)
        if (head1 == null) {
            cur.next = head2;
        }

        if (head2 == null) {
            cur.next = head1;
        }

        //3. 返回
        return head.next;
    }

题目六:

链表分割_牛客题霸_牛客网 (nowcoder.com)

public ListNode partition(ListNode pHead, int x) {
        // write code here
        
        //1. 如果链表为null
        if (pHead == null) {
            return pHead;
        }

        //2. 定义两组傀儡节点
        ListNode head1 = new ListNode(-1);
        ListNode cur1 = head1;
        ListNode head2 = new ListNode(-1);
        ListNode cur2 = head2;

        //3. 遍历所给链表
        while (pHead != null) {
            if (pHead.val < x) {
                cur1.next = pHead;
                cur1 = cur1.next;
            } else {
                cur2.next = pHead;
                cur2 = cur2.next;
            }
            pHead = pHead.next;
        }

        //4. 合并两个傀儡链表
        //① 如果前一个链表为null
        if (head1.next == null) {
            return head2.next;
        }
        //② 如果前一个链表不为null(包含后一个链表为null和不为null的情况)
        cur1.next = head2.next;
        cur2.next = null;//最后一个节点的值给了前一个链表,则此时后一个链表的最后一个节点的next一定不是null
        return head1.next;
    }

题目七:正

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

public boolean chkPalindrome(ListNode A) {
        // write code here

        //1. 如果链表为null
        if (A == null) {
            return true;
        }

        //2. 找到中间节点
        ListNode fast = A;//每次走两步
        ListNode slow = A;//每次走一步
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }

        //3. 翻转中间节点之后的所有节点
        ListNode cur = slow.next;//待翻转节点
        while (cur != null) {
            ListNode curN = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curN;
        }

        //4. 判断是否为回文
        fast = A;
        while (fast != slow) {//链表节点个数为奇数,fast==slow为结束标志
            if (fast.val != slow.val) {//不对称
                return false;
            } else {//对称
                if (fast.next == slow) {//链表节点个数为偶数,fast.next==slow为结束标志
                    return true;//如果是对称的条件,并且满足了偶数节点个数的结束条件,则可直接返回
                }
                fast = fast.next;
                slow = slow.next;
            }
        }

        //5. 返回
        return true;
    }

题目八:正

160. 相交链表 - 力扣(LeetCode)

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        //题目已经提示两个链表的节点个数一定不为0

        //1. 计算两个链表的长度,并假设链表A更长
        int countA = 0;
        int countB = 0;
        ListNode curA = headA;
        ListNode curB = headB;
        while (curA != null) {
            countA++;
            curA = curA.next;
        }
        while (curB != null) {
            countB++;
            curB = curB.next;
        }

        //2. 判断究竟哪个链表更长
        int sub = countA - countB;
        curA = headA;
        curB = headB;
        if (sub < 0) {//此时B链表更长
            curA = headB;
            curB = headA;
            sub = countB - countA;
        }

        //3. 让更长的链表先走sub步
        for (int i = 0; i < sub; i++) {
            curA = curA.next;
        }

        //4. 找相遇节点
        while (curA != null) {//只用判断curA和curB中是否有一个为null即可
            if (curA == curB) {
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }

        //5. 代码走到这里一定是因为两个链表不相交
        return null;
    }

题目九:正

141. 环形链表 - 力扣(LeetCode)

public boolean hasCycle(ListNode head) {
        //定义快慢指针(下列代码链表为null也能正确处理)
        ListNode fast = head;//一次走两步
        ListNode slow = head;//一次走一步
        while (fast != null && fast.next != null) {//有顺序要求的原因,如果链表为空,后面的会空指针异常
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                return true;
            }
        }
        return false;
    }

题目十:正

142. 环形链表 II - 力扣(LeetCode)

public ListNode detectCycle(ListNode head) {
        //1. 找到快慢指针相遇的节点
        //定义快慢指针(下列代码链表为null也能正确处理)
        ListNode fast = head;//一次走两步
        ListNode slow = head;//一次走一步
        while (fast != null && fast.next != null) {//有顺序要求的原因,如果链表为空,后面的会空指针异常
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                break;
            }
        }
        
        //2. 判断是如何出while循环的
        //关于不能以fast != slow作为循环条件的原因
        //答:当链表为null,或链表只有一个节点时,也满足该条件,
        //此时则不能判定是fast==slow的情况
        if (fast == null || fast.next == null) {
            return null;
        }

        //3. 寻找入环点
        fast = head;
        while (fast != slow) {
            fast = fast.next;
            slow = slow.next;
        }

        //4. 返回
        return fast;
    }

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

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

相关文章

工业数据采集网关简介-天拓四方

随着工业4.0和物联网&#xff08;IoT&#xff09;技术的深入发展&#xff0c;工业数据采集网关作为连接现场设备与上层管理系统的关键节点&#xff0c;其在智能工厂中的作用愈发凸显。本文将深入探讨工业数据采集网关的功能、特点、应用场景及其实操性&#xff0c;以期为读者提…

【JPCS出版】第三届机械、航天技术与材料应用国际学术会议 (MATMA 2024)

第三届机械、航天技术与材料应用国际学术会议(MATMA 2024)定于2024年08月30-9月1日在中国呼和浩特隆重举行。 本会议由内蒙古工业大学主办&#xff0c;主要围绕“机械工程”、“航天技术”与“材料应用”等最新研究领域展开研讨&#xff0c;为来自国内外高等院校、科学研究所、…

【SpringCloud】(一文通)SpringCloud 环境和工程搭建

目 录 一. 开发环境安装二. 案例介绍2.1 需求2.2 服务拆分 三. 数据准备四. 工程搭建4.1 构建父子工程4.1.1 创建父工程4.1.2 创建子项目-订单服务4.1.3 创建子项目-商品服务 4.2 完善订单服务4.2.1 完善启动类, 配置文件4.2.2 业务代码4.2.3 测试 4.3 完善商品服务4.3.1 完善启…

Cesium实现单个无人机飞行

通过一组坐标&#xff0c;实现平滑的无人机飞行效果 测试步骤&#xff1a; 1、手动填写坐标并记录坐标(可通过点击球面查看坐标信息) 2、点击初始化&#xff0c;载入相应的坐标信息 3、点击漫游&#xff0c;镜头会平滑演进 低配置云服务器&#xff0c;首次加载速度较慢&…

设备状态图表-甘特图

1.背景&#xff1a;设备状态监控图表&#xff0c;监控不同状态的时间段&#xff0c;可以使用甘特图来展示效果 鼠标经过时的数据提示框 2、代码实现 <template><divref"ganttChartRefs":style"{ height: 6.2rem, width: 100% }"class"bg…

利用ai写作软件,一键智能改写文案很简单

在当今快节奏的时代&#xff0c;科技的发展日新月异&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐融入到我们生活的各个方面。其中&#xff0c;AI写作工具的出现为文案创作带来了极大的便利&#xff0c;让一键智能改写文案变得简单而高效。 AI写作工具利用先进的算法…

项目技巧1

目录 创建项目工程的技巧 示例&#xff1a;创建父工程 第一步&#xff1a;初始化maven项目 第二步&#xff1a;使用标签 抽取依赖的资源版本号&#xff0c;方便后续调整 第三步&#xff1a;配置父工程锁定的版本&#xff0c;使用 该标签的作用&#xff1a;锁定资源的版本号&…

初探Raft算法

在分布式系统有一个经典的CAP理论&#xff0c;C&#xff1a;一致性&#xff0c;即集群中所有节点都应该是一致的。A&#xff1a;可用性&#xff0c;集群一直处于可用状态。P&#xff1a;分区容错性&#xff1a;即复制所有数据到集群的所有节点&#xff0c;保证即使出现网络分区…

TQRFSOC开发板47DR,LMK04832更新配置

在利用RFSOC开发板进行项目开发时&#xff0c;面对多样化的时钟需求&#xff0c;巧妙地配置LMK04832时钟管理芯片以输出精确的时钟信号显得尤为重要。本期内容将讲解如何通过ZYNQ更新LMK04832的配置&#xff0c;以满足您的特定时钟需求。 每次配置成功后&#xff0c;配置文件都…

电路笔记(PCB):JLC PCB布局和走线基础教程笔记

对立创EDA 四层板PCB设计保姆级教程的笔记看完才发现是个虚假的教程&#xff0c;除了没教四层板咋画其它教了&#xff08;中间的两层全是GND的作用&#xff09; PCB布局 转换原理图 使用USB模块&#xff08;3.0集线器&#xff09;中的原理图。设计- - -》更新/转换原理图到P…

CSP内容安全策略

目录 CSP内容安全策略 一、引入 二、CSP内容安全策略 1、通过 HTTP 响应头信息的 Content-Security-Policy 的字段 2、通过网页的 meta 标签 3、在security的read.php页面&#xff0c;增加以下响应头 4、report-uri安全报告 5、其他安全配置 6、Web服务器全局配置 三…

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

8月20日

思维导图 面试题整理&#xff1a; 数据结构中顺序表和链表的区别? 顺序表&#xff1a; 1、存储方式&#xff1a;顺序表是一系列连续的内存空间&#xff0c;每个元素的地址可以通过索引计算出&#xff1b; 2、访问速度&#xff1a;由于不需要遍历查找&#xff0c;访问速度较…

一路坎坷-Mac下安装Python3、环境变量配置、安装jupyter notebook

遇到很多问题最终解决--Mac下安装Python3、环境变量配置、安装jupyter notebook 下载-安装python打开Mac终端-安装Jupyter给python3配置环境变量给jupyter配置环境变量配置遇到的问题 首先说一下我是先下载python3.8-然后安装&#xff1b;再在苹果电脑的终端下载Jupyter的&…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S&#xff1a;客户端/服务器端&#xff0c;所有网络应用都是基于客户端服务器端进行的&#xff0c;Java写的是服务端&#xff0c;客户端是一个软件&#xff0c;服务端也是一个软件&#xff0c;两个软件之间交互&#xff1b;&#xff08;只能连接对应的服务器&#xff09; B/…

使用 Arch Linux 几个月有感 | 为什么我选择 Arch Linux ,Arch 的优缺点有什么 | 一些Linux发行版推荐

&#xff08;终端是 Yakuake &#xff0c;KDE 自带&#xff09; 一点碎碎念&#xff0c;可以跳过不看 几年前从 CentOS 接触的 Linux &#xff0c;试图搭建一个KMS服务器 但是失败了 &#xff0c;后来装过 Ubuntu Debian deepin Kali Kubuntu Manjaro&#xff0c;踩一路坑最后…

线性数据结构的基本概念(数组,链表,栈,队列)

数组 数组由相同类型的元素组成&#xff0c;使用一块连续的内存来存储。 数组的特点是&#xff1a; 1.利用索引进行访问 2.容量固定 3.使用一块连续的内存来存储 各种操作的时间复杂度&#xff1a; 查找/修改&#xff1a;O&#xff08;1&#xff09;//访问特定位置的元素 插入…

day07_算法训练

案例零&#xff1a;整数反转&#xff08;大整数算法&#xff09; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 暂时不用考虑数据太大的问题&#xff0c;把本题的核心思路写出来即可 比如&#xff1a; ​ 输入&#xff1a;x 123 ​ 输出…

一分钟带你了解叉车!

一、叉车的概念 叉车是指对整件托盘货物或大件桶装进行装卸、堆垛和短距离运输作业的各种搬运车辆。叉车是实现整件货物和散装物料机械化装卸、堆垛和短途运输的高效率工作车辆。 叉车常用于仓储大型物件的运输、车站、码头、机场、仓库、工地、货厂和工矿企业&#xff0c;是…

【案例47】enq: TX - row lock contention事件导致制单卡死

问题现象 制单时&#xff0c;选择公司就会卡住不动&#xff0c;其他节点正常。 问题分析 通过nmc排查&#xff0c;发现后台有很多制单线程卡住&#xff0c;时间较久&#xff0c;并且当前的事件都是在数据库执行sql层面。并且每条线程的卡住语句都为update语句&#xff0c;怀…