<习题集><LeetCode><链表><61/83/82/86/92>


61. 旋转链表

https://leetcode.cn/problems/rotate-list/

    public ListNode rotateRight(ListNode head, int k) {//k等于0,或者head为空,直接返回head;if(k == 0 || head == null){return head;}//创建last用于记录尾节点,移动last找到尾节点,同时计算链表长度n;ListNode last = head;int n = 1;while(last.next != null){n++;last = last.next;}//k取模,避免重复翻转的情况;k = k%n;//k等于0,不用翻转直接返回head;if(k == 0){return head;}//创建移动的指针节点,找到开始翻转的节点的前一个节点;ListNode cur = head;int step = n-k;for(int i=step-1;i>0;i--){cur = cur.next;}//记录开始翻转的节点,这个节点就是返回的新链表的头节点。ListNode root = cur.next;//将尾节点和头节点连接;last.next = head;//截断开始翻转的前一个节点;cur.next = null;return root;}

83. 删除排序链表中的重复元素

https://leetcode.cn/problems/remove-duplicates-from-sorted-list/

    public ListNode deleteDuplicates(ListNode head) {//head为空,直接返回head;if (head == null) {return head;}//创建一个用于移动的指针节点;ListNode cur = head;//遍历链表,下一节点为空时,代表遍历完成;while (cur.next != null) {//如果前后节点值相等,则将后节点删除,前节点指向更后一个节点;if(cur.val == cur.next.val){cur.next = cur.next.next;}else{//否则向后移动;cur = cur.next;}}return head;}

82. 删除排序链表中的重复元素 II

https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/

    public ListNode deleteDuplicates(ListNode head) {//如果链表为空,返回null;if(head == null){return null;}//创建一个用于移动的指针节点,这个节点初始位置在head前;ListNode cur = new ListNode(-1,head);//记录节点cur的初始位置,用于返回;ListNode root = cur;//当cur的后两个位置有值时;while(cur.next!=null && cur.next.next!=null){//判断两个值是否相等;if(cur.next.val == cur.next.next.val){//相等则记录前一个值;ListNode curNext = cur.next;//在后一个值存在的前提下,将前一个值不断和后一个值比较;while(curNext.next!=null && curNext.val == curNext.next.val){//如果前后值相等,则前值后移;curNext = curNext.next;}//通过上述循环,走到此处则是遇到前后值不同的两个节点了;//将移动的指针节点cur的next,指向这个不同的后值。cur.next = curNext.next;}else{//如果前后值不相等,则cur向后移动;cur = cur.next;}}//返回记录的节点;return root.next;}

86. 分隔链表

https://leetcode.cn/problems/partition-list/

    public ListNode partition(ListNode head, int x) {//如果链表为空,直接返回;if(head == null){return null;}//建立两个链表,分别存储小于x和大于等于x的节点;ListNode less = new ListNode(-1);ListNode lCur = less;ListNode greater = new ListNode(-1);ListNode gCur = greater;//移动head节点,根据head节点值的大小为上面两个链表分配节点;while(head != null){if(head.val < x){lCur.next = head;lCur = lCur.next;}else{gCur.next = head;gCur = gCur.next;}head = head.next;}//greater链表肯定是放在两个链表偏后的,将这个链表的尾部置空,避免环形链表;gCur.next = null;//如果less为空,直接返回greater链表,注意返回的是next;if(less.next == null){return greater.next;}else{//如果less不为空,将less链表的尾部指向greater链表后,返回;lCur.next = greater.next;return less.next;}}

92. 反转链表 II

https://leetcode.cn/problems/reverse-linked-list-ii/

    public ListNode reverseBetween(ListNode head, int left, int right) {//因为head有可能被改变,创建一个节点,指向head,用于返回;ListNode root = new ListNode(-1,head);//创建节点pre,并将pre移动到指定开始翻转的节点的前一个节点;ListNode pre = root;for (int i=0;i<left-1;i++) {pre = pre.next;}//创建一个节点cur,cur指向需要反转的第一个节点;//cur最终会转到需要反转的最后一个节点位置上;ListNode cur = pre.next;for(int i=0;i<right-left;i++){//先记录cur的下一个节点;ListNode curNext = cur.next;//将cur的下一节点指向下下个节点;cur.next = curNext.next;//将curNext的下一节点指向pre的下一节点;//注意不要指向cur,因为cur一直在移动;curNext.next = pre.next;//将pre的下一节点指向curNext;//因为每次curNext都会更新;//这代表pre的下一节点指向的节点会随着循环的进行逐渐指向right的那个节点;pre.next =curNext;}return root.next;}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu22.04 安装cuda

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由 NVIDIA 开发的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA 的 GPU&#xff08;图形处理单元&#xff09;进行高效的计算处理。CUDA 通过提供一系列的 C、C 和 Fortran 扩展&#xff0c;使得开发…

MQTT 协议入门:轻松上手,快速掌握核心要点

文章目录 什么是 MQTT&#xff1f;MQTT 的工作原理MQTT 客户端MQTT Broker发布-订阅模式主题QoS MQTT 的工作流程开始使用 MQTT&#xff1a;快速教程准备 MQTT Broker准备 MQTT 客户端创建 MQTT 连接通过通配符订阅主题发布 MQTT 消息MQTT 功能演示保留消息Clean Session遗嘱消…

Ui自动化概念 + Web自动化测试框架介绍!

1.UI自动化测试概念:我们先明确什么是UI UI&#xff0c;即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试&#xff0c;UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …

【江科大--32课程中讲解到的外部设备】

一、传感器模块&#xff08;GPIO模块&#xff09; 1.基本介绍 传感器模块&#xff1a;传感器元件&#xff08;光敏电阻/热敏电阻/红外接收管等&#xff09;的电阻会随外界模拟量的变化而变化&#xff0c;通过与定值电阻分压即可得到模拟电压输出&#xff0c;再通过电压比较器进…

Redis基础系列-持久化

Redis基础系列-持久化 文章目录 Redis基础系列-持久化1. 什么是持久化2. 为什么要持久化3. 持久化的两种方式3.1 持久化方式1&#xff1a;RDB(redis默认持久化方式)3.11 配置步骤-自动触发3.12 配置步骤-手动触发3.12 优点3.13 缺点3.14 检查和修复RDB快照文件3.15 哪些情况会触…

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main.…

测试文档---智力冲刺

文章目录 项目背景测试计划UI测试接口测试手工测试 测试总结 项目背景 项目描述&#xff1a;“智力冲刺”是一款网页小游戏&#xff0c;就像我们平时看到的网页游戏一样&#xff0c;前端页面负责展示游戏效果&#xff0c;后端服务器来实现游戏的逻辑。在我们的“智力冲刺”游戏…

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi&#xff0c;升级vim&#xff0c;执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…

JAVA后端自学技能实操合集

JAVA后端自学技能实操 内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习FastDFS使用docker安装FastDFS(linux)集成到springboot项目中 内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习 FastDFS 组名&#xff1a;文件上传后所在的 st…

2023新型智能优化算法-小龙虾优化算法

1 灵感来源 COA的灵感来源于小龙虾的觅食、避暑和竞争行为。觅食阶段和竞争阶段是COA的开发阶段&#xff0c;避暑阶段是COC的探索阶段。 2 数学模型 2.1 初始化种群 采用随机初始化种群&#xff0c;相信大家都能看懂&#xff0c;直接原文献截图。 2.2 确定小龙虾的温度和摄入…

【JavaEE进阶】 Spring使用注解存储对象

文章目录 &#x1f334;序言&#x1f340;前置⼯作&#xff1a;配置扫描路径&#x1f384;添加注解存储 Bean 对象&#x1f333;类注解&#x1f6a9;为什么要这么多类注解&#x1f6a9;注解之间的联系 &#x1f38b;⽅法注解 Bean&#x1f6a9;⽅法注解需要配合类注解使⽤ ⭕总…

远程服务器QEMU+Ubuntu+GRUB+VNC最佳实践

远程服务器QEMUUbuntuGRUBVNC最佳实践 1. 准备2. QEMU启动安装Ubuntu2.1 服务器端2.2 本地端 3. 从服务器终端控制虚拟机GRUB与虚拟机终端 这段时间参与大量内核切换测试工作&#xff0c;实体机需要硬件自检太过笨重&#xff0c;因此主要通过QEMU验证正确性。有一个很大的问题是…