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

两两交换链表中的节点

给定链表需两两交换相邻节点并返回,不可修改节点值仅能交换节点。方案引入哑节点 dummy 简化头结点逻辑,通过 node0 至 node3 四个指针维护当前对及下一对状态,执行指针重连完成交换。循环直至无法成对。该算法时间复杂度为 O(n),空间复杂度为 O(1)。

颠三倒四发布于 2026/3/24更新于 2026/10/1772 浏览
两两交换链表中的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

不能修改节点内部的值(即只能实际交换节点)。

解题思路

  • 使用哑节点 dummy 简化头结点被交换的处理。
  • 维护四个指针:
    • node0:当前待交换对的前驱节点(初始为 dummy)
    • node1:当前对的第一个节点
    • node2:当前对的第二个节点
    • node3:下一对的起始节点(node2 的后继)
  • 交换步骤(重连指针):
    • node0.next = node2
    • node2.next = node1
    • node1.next = 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. 复杂度分析

更多推荐文章

查看全部
  • Python 爬虫入门:新手如何编写你的第一个脚本
  • Llama Factory 微调加速指南:GPU 并行训练部署
  • 2026 年 3 月 GESP 真题解析:数字替换(C++ 一级)
  • Browser Use 使用指南:AI 自动控制浏览器
  • 6 层高速 PCB 设计实战:逻辑派 FPGA-G1 开发板布局布线详解
  • OpenClaw 部署指南:安装、Coding Plan 配置与飞书机器人接入
  • 腾讯开源 HunyuanVideo 1.5:8.3B 参数模型支持消费级显卡部署
  • 修复 Copilot 和 Codex 写入中文乱码
  • 前后端分离架构(Vue+SpringBoot)项目部署流程与方案对比
  • 算法实战:位运算解决两数之和、唯一数字与缺失数字
  • 机器人动力学:牛顿欧拉法推导与详述
  • OpenClaw 多端交互指南:Web 控制台、TUI 终端及钉钉集成
  • 前端实时数据刷新方案:WebSocket、轮询及 Web Worker
  • 大语言模型提示词调试的 6 个关键步骤
  • 宇树机器人 SDK2 开发指南:环境搭建与 Demo 测试
  • C++ 高效碰撞检测实现与物理引擎性能优化
  • Stable Diffusion 局部重绘教程:轻松去除照片多余人物
  • Flutter TabBar 高级标签系统与导航交互优化实现
  • AI 大模型全解析:从原理到应用实战指南
  • Qwen3-VL 法律场景长文档 OCR 结构化解析教程

相关免费在线工具

  • 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