跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

两两交换链表中的节点:思路与实现

针对链表两两交换相邻节点的问题,通过引入哑节点避免处理头节点的特殊情况。利用四个指针维护节点间的连接关系,在遍历过程中依次重连指针完成交换。该方法时间复杂度为 O(n),空间复杂度为 O(1)。

极客工坊发布于 2026/3/26更新于 2026/6/1230 浏览
两两交换链表中的节点:思路与实现

两两交换链表中的节点:思路与实现

问题背景

给定一个链表,要求两两交换其中相邻的节点,并返回交换后的链表。注意,不能修改节点内部的值,只能实际交换节点。

核心思路

处理链表头节点变化是个麻烦事,引入一个哑节点(dummy)能省去很多边界判断。我们需要四根'手指'来定位当前节点和下一组节点的关系:

  • node0:当前待交换对的前驱节点,初始指向 dummy。
  • node1:当前对的第一个节点。
  • node2:当前对的第二个节点。
  • node3:下一对的起始节点(即 node2 的后继)。

交换的核心在于指针的重连。只要确保 node0 指向 node2,node2 指向 node1,而 node1 指向 node3,这一对就交换成功了。之后将 node0 移到 node1 的位置,node1 移到 node3 的位置,继续处理下一对。循环条件设为 node1 与 node1.next 都非空,保证成对交换。

代码实现

下面是具体的实现逻辑,重点看指针重连的部分。

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0, head);
        ListNode node0 = dummy;
        ListNode node1 = head;
        while (node1 != null && node1.next != null) {
            ListNode node2 = node1.next;
            ListNode node3 = node2.next;
            
            // 断开并重连,完成一对交换
            node0.next = node2;
            node2.next = node1;
            node1.next = node3;
            
            // 移动到下一对
            node0 = node1;
            node1 = node3;
        }
        return dummy.next;
    }
}

复杂度分析

时间上,每个节点至多被访问和指针重连一次,所以是 O(n)。空间上,只使用了常数个指针,不需要额外分配内存,空间复杂度为 O(1)。

目录

  1. 两两交换链表中的节点:思路与实现
  2. 问题背景
  3. 核心思路
  4. 代码实现
  5. 复杂度分析
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenCode 搭配 GitHub Copilot 打造高性价比 AI 编程方案
  • Coze 智能体从入门到实战:工作流配置与 API 调用指南
  • 基于 Python 实现京东优惠券自动领取脚本
  • 字节跳动前端一面面经深度解析
  • 多 OpenClaw 机器人对接飞书实现群聊配置
  • VSCode Copilot 登录失败常见原因与解决方案
  • Trae 编辑器 Java 项目全局 Maven 与 JDK 配置
  • C++ 仿 Muduo 库:高并发服务器架构初探
  • C++ 二维前缀和算法模板与解析
  • OpenClaw 助手 20 个精选 Skills 配置与实战指南
  • OpenCode Superpowers 插件安装及实战使用指南
  • pywebview:用 Python 和 Web 技术构建轻量级桌面应用
  • 大模型时代 AI Agent 技术架构与应用详解
  • ESP32-S3 轮腿机器人实战:自平衡与身高调节
  • MCP Document Reader:让 AI 助手高效读取本地文档
  • Arduino BLDC 模糊逻辑避障控制机器人实战
  • 华为 HCIP-AI Solution Architect H13-323 核心考点与解析
  • FPGA 部署 YOLOv5 算法的一般流程
  • OpenClaw 技能包安装与实战指南
  • 知网 AIGC 检测不通过?三款降 AI 工具实测对比

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online