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

两两交换链表中的节点:指针操作详解

链表两两交换节点要求不能修改节点内部值,只能实际交换节点。通过引入哑节点简化头结点处理,维护四个指针追踪当前对及下一对位置,依次重连指针完成交换。循环条件确保成对处理,时间复杂度 O(n),空间复杂度 O(1)。

菩提发布于 2026/3/22更新于 2026/10/2486 浏览
两两交换链表中的节点:指针操作详解

问题描述

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

注意:不能修改节点内部的值,只能实际交换节点。

核心思路

处理链表交换时,头结点往往比较特殊。引入哑节点(dummy node)可以统一逻辑,避免单独处理头结点被交换的情况。

我们需要维护四个指针来追踪当前待交换的一对节点以及它们的前后关系:

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

交换的核心在于重连指针:

  1. node0.next 指向 node2
  2. node2.next 指向 node1
  3. 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;
        }
         dummy.next;
    }
}
// 移动到下一对
return

复杂度分析

  • 时间复杂度:O(n),每个节点至多被访问和指针重连一次。
  • 空间复杂度:O(1),只使用常数个指针。

参考题目:LeetCode 24. 两两交换链表中的节点

目录

  1. 问题描述
  2. 核心思路
  3. 代码实现
  4. 复杂度分析

更多推荐文章

查看全部
  • VS Code + GitHub Copilot 实战指南:从配置到高效协作
  • LLM 性能提升关键:提示工程与优化策略
  • Faster-Whisper 实现 3 倍速语音转文字:完整参数配置指南
  • WebAI2API:将网页版 AI 转为兼容 OpenAI 协议的 API 服务
  • 大型语言模型(LLM)微调技术全面总结
  • C语言Web开发:CGI、FastCGI与Nginx详解
  • OpenClaw 接入微信教程:一条命令集成 AI 助手
  • Cookie 与 Session:Web 用户状态管理的双刃剑
  • 通义千问 VS GPT-4:人工智能大模型性能实测与开源部署指南
  • 实际项目里用了用 Copilot、Comate 和通义灵码,聊点真实感受
  • 未岚大陆 CES 2026 发布 Navimow 标准:零转全驱与激光雷达技术解析
  • Rust 与 WebAssembly 深度实战:浏览器与 Node.js 的高性能融合
  • 6 款免费 AI 写作软件测评与去 AI 味工具推荐
  • Android RxJava3 核心使用场景与实战指南
  • VS Code 切换或退出 GitHub Copilot 账号指南
  • Python 爬取小红书笔记数据及词云可视化分析
  • MVI 架构更佳实践:支持 LiveData 属性监听
  • Python IDE 选型指南:主流工具对比与场景适配
  • C++ 图论实战:深入理解三种经典最短路径算法
  • 利用 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