当前位置: 首页 > news >正文

LeetCode 解题思路 15(Hot 100)

在这里插入图片描述

解题思路:

  1. 引入哑节点: 简化头节点删除操作,统一处理所有边界条件。
  2. 快慢指针法: 快指针先移动 n 步,确保快慢指针距离为 n,之后同步移动快慢指针。当快指针到达末尾时,慢指针指向倒数第 n 个节点的前驱。
  3. 删除节点: 调整慢指针的 next 指针,跳过目标节点。

Java代码:

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(-1);dummy.next = head;ListNode fast = dummy, slow = dummy;for (int i = 0; i < n; i++) fast = fast.next;while (fast.next != null) {slow = slow.next;fast = fast.next;}slow.next = slow.next.next;return dummy.next;}
}

复杂度分析:

  • 时间复杂度: O(m),其中m是链表的长度。
  • 空间复杂度: O(1),只使用了常数级别的额外空间。

在这里插入图片描述

解题思路:

  1. 创建哑节点: 作为新链表的头前驱,统一处理头节点交换。
  2. 初始化指针: prevEnd:标记当前交换对的末尾,初始指向哑节点。first 和 second:指向待交换的两个节点。
  3. 交换节点: 保存 second 的下一个节点 nextNode。调整指针顺序:prevEnd → second → first → nextNode。
  4. 移动指针: prevEnd 移动到当前交换后的第一个节点(原 first),继续处理下一对。
  5. 终止条件: 当剩余节点不足两个时停止循环。

Java代码:

class Solution {public ListNode swapPairs(ListNode head) {if (head == null || head.next == null) return head;ListNode dummy = new ListNode(-1);dummy.next = head;ListNode prevEnd = dummy;ListNode first = prevEnd.next;ListNode second = first.next;while (first != null && second != null) {ListNode nextNode = second.next;prevEnd.next = second;second.next = first;first.next = nextNode;prevEnd = first;first = prevEnd.next;if (first == null) break;second = first.next;if (second == null) break;}return dummy.next;}
}

复杂度分析:

  • 时间复杂度: O(n),遍历链表一次,每个节点操作为常数时间。
  • 空间复杂度: O(1),仅使用哑节点和指针变量,常数空间。

http://www.mrgr.cn/news/94319.html

相关文章:

  • 独立开发记录:使用Trae和Cloudflare快速搭建了自己的个人博客
  • ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数)
  • 【C#学习笔记04】C语言格式化输出
  • 深度剖析 Doris 数据倾斜,优化方案一网打尽
  • 【二分查找 寻找首端】P3718 [AHOI2017初中组] alter|普及+
  • uniapp实现 uview1 u-button的水波纹效果
  • 使用memmove优化插入排序
  • 新闻网页信息抽取
  • JVM 垃圾回收器的选择
  • 广播机制(Broadcasting)
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • HOT100——二叉树篇Leetcode236. 二叉树的最近公共祖先
  • windows 下用docker 部署nginx
  • 项目组织管理类型-矩阵式组织和组合式组织的区别
  • RSA混合加密RSA混合加密
  • MySQL 8 设置允许远程连接(Windows环境)
  • 使用 Excel 实现绩效看板的自动化
  • 微信小程序:实现多功能表格效果,例如滚动效果、宽度自定义、多选、行内编辑等功能
  • 如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法
  • 【不动产登记全解析】范围、内容与不予登记的情形