链表-两两交换(Java的三种解法)

链表-两两交换(Java的三种解法)

道题是链表操作的一个经典问题,掌握了它,你对链表的指针操作和递归思维会有更深的理解。只要你跟着我的思路走一遍,自己动手写写代码,很快就能独立解决这类问题!咱们现在就来聊聊这道题吧


1. 看到这道题目时我想到了什么,以及如何运用现实案例讲解

你有没有想过,生活中很多事情都像是“交换顺序”或者“重新排列”。比如说,你在排队买东西,队伍里的人两两交换位置,前面的人变成后面,后面的人变成前面,这就是一种“两两交换”的操作。

再举个贴近算法的例子:想象你在整理一排书,原本是按顺序摆放的,但你想把相邻的两本书交换位置,比如第1本和第2本换,第3本和第4本换,这样整个书架的顺序就变了。这就像链表的两两交换,我们需要调整指针,让相邻节点的位置互换。

业务场景:这道题在实际业务中有很多应用,比如:

  • 数据排序:在某些场景下,需要对数据进行局部重排,比如用户列表中两两交换显示顺序,用于A/B测试。
  • 任务调度:在任务队列中,调整任务执行顺序,比如优先级相邻任务交换,提升调度效率。
  • 游戏设计:在游戏排行榜中,动态调整玩家位置,比如相邻玩家交换,用于视觉效果或平衡机制。

2. 解法分析:至少3种解法,最优解法和最快解法

解法1:递归(Recursion)——直观且代码简洁

思路:用递归的方式处理链表的两两交换。每次处理当前节点和下一个节点,交换它们的位置,然后递归处理剩余的链表。终止条件是当前节点为空或下一个节点为空。

  • 时间复杂度:O(n),n是链表节点数量,每个节点只处理一次。
  • 空间复杂度:O(n),由于递归调用栈,最坏情况下为链表长度。
解法2:迭代(Iteration with Dummy Node)——更符合工程实践

思路:用迭代的方式处理链表,引入一个哑节点(dummy node)作为辅助,方便处理头节点交换。每次处理一对节点,调整指针完成交换,然后移动到下一对节点。

  • 时间复杂度:O(n),每个节点只遍历一次。
  • 空间复杂度:O(1),只用常数级额外空间。
解法3:迭代(Iteration without Dummy Node)——直接操作头节点

思路:与解法2类似,但不引入哑节点,直接操作头节点。需要额外处理头节点交换的情况,代码逻辑稍复杂,但也能实现两两交换。

  • 时间复杂度:O(n),每个节点只遍历一次。
  • 空间复杂度:O(1),只用常数级额外空间。
最优解法和最快解法
  • 最优解法:如果追求代码可读性和工程实践,推荐迭代解法(带哑节点),因为它空间复杂度低,逻辑清晰,容易维护。如果是初学者或面试中追求简洁,递归解法也是不错的选择。
  • 最快解法:在实际运行中,**迭代解法(带哑节点)**通常是最快的,因为它避免了递归的调用栈开销,且指针操作效率高。

迭代解法(带哑节点)模板(Java)

publicListNodeswapPairs(ListNode head){ if(head ==null|| head.next ==null)return head;ListNode dummy =newListNode(0); dummy.next

Read more

openclaw飞书机器人权限管理

为了确保 OpenClaw 既能顺畅运行,又不至于因权限过大导致安全隐患,建议在飞书开发者后台 - 权限管理中,按照以下清单进行勾选。 这份清单分为基础必备和进阶功能两部分: 1. 基础必备权限(无论个人还是团队,必须开启) 这些权限保证机器人能“听到”指令并“开口”说话: * im:message:p2p_msg:readonly (接收单聊消息) —— 允许机器人和你 1 对 1 聊天。 * im:message:group_at_msg:readonly (接收群聊中@机器人的消息) —— 团队场景下,机器人只响应被 @ 的内容,保护群隐私。 * im:message.p2p_msg:send (发送单聊消息) —— 机器人回复你的基础。 * im:message.

By Ne0inhk
用OpenClaw做飞书ai办公机器人(含本地ollama模型接入+自动安装skills+数据可视化)

用OpenClaw做飞书ai办公机器人(含本地ollama模型接入+自动安装skills+数据可视化)

执行git clone https://github.com/openclaw/openclaw克隆项目,执行cd openclaw进入项目 执行node --version看看node的版本是否大于等于22(没有node.js需自行安装),再执行npm install -g pnpm安装作为包管理器,并执行pnpm install安装依赖 首次执行pnpm ui:build构建 Web UI(会先安装 ui/ 目录的依赖) 执行pnpm build构建主程序 执行pnpm openclaw onboard --install-daemon运行配置向导(安装守护进程),完成初始化 按键盘右箭头选择Yes,同样Yes 任选一个模型提供商都行,没有对应的提供商的密钥可以跳过,如果是本地模型选vLLM(需用vLLM框架启动模型,有性能优势,但原生vLLM仅完全支持Linux的cuda)、Custom Provider(可以连接任何 OpenAI 或 Anthropic 兼容的端点,

By Ne0inhk

OpenClaw大龙虾机器人完整安装教程

OpenClaw(大龙虾机器人)是一款本地部署的全能AI助手,可通过WhatsApp、Telegram、飞书等聊天软件实现邮件处理、日历管理、系统操作等功能,数据本地存储更隐私。本教程适配macOS/Linux/Windows系统,包含基础安装、初始化配置、聊天软件对接及常见问题解决,新手也能快速上手。 一、安装前准备 1. 系统与硬件要求 配置项最低要求推荐配置操作系统macOS 12+/Ubuntu 20.04+/Windows 10(需WSL2)macOS 14+/Ubuntu 22.04+/Windows 11内存4GB8GB+磁盘空间2GB可用10GB+ SSD核心依赖Node.js 18.0+Node.js v22 LTS最新版 2. 必备前置资源 * AI模型API Key:Claude、GPT-4/

By Ne0inhk
基于深度学习yolo系列+deepseek+qwen大模型的智能识别系统 中草药检测+行人车辆检测+垃圾分类检测+茶叶病虫害检测+无人机目标检测

基于深度学习yolo系列+deepseek+qwen大模型的智能识别系统 中草药检测+行人车辆检测+垃圾分类检测+茶叶病虫害检测+无人机目标检测

智能检测系统综合概述 定制联系文末卡片 目标检测系统应用场景表 系统类型检测目标适用领域中草药检测45种中草药中医药、药材鉴定脑肿瘤检测胶质瘤等脑部肿瘤医疗影像诊断行人车辆检测行人、车辆等多目标交通监控、安防玉米病虫害检测6种玉米病害农业植保裂缝检测6种表面缺陷工业质检、建筑检测垃圾分类检测4类垃圾环保、智慧城市遥感目标检测地理空间目标遥感分析、军事侦察西瓜病虫害检测多种西瓜病害农业种植管理海洋生物检测海豚、鲨鱼等海洋科研、教育茶叶病虫害检测6种茶叶病害茶叶种植、农业 包括但不限于此!!!! 🏗️ 统一技术架构 所有系统都基于相似的模块化技术栈: • 前端:Vue3 + Element-Plus + TypeScript + Echarts • 后端:SpringBoot + MyBatis-Plus + Flask • 深度学习:YOLO系列 + PyTorch • 数据库:MySQL • 大模型集成:DeepSeek + Qwen 🔄 标准化功能模块 检测功能四合一 1. 图片检测 - 单张图片上传识别 2. 批量

By Ne0inhk