跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava算法

两两交换链表中的节点

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

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

题目描述

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

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

解题思路

  • 使用哑节点 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. 复杂度分析
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Dify 与 MySQL 的深度融合:基于 MCP 协议的数据交互实践
  • Face Fusion 人脸风格迁移与云端部署实战
  • GitHub Copilot 学生认证指南:Pro 版免费权益获取流程
  • Python 爬虫开发入门:Requests、Scrapy 与 Selenium 实战指南
  • 前缀和与哈希表实战:解决和为 K 及整除子数组问题
  • 基于 Stable Diffusion 从零搭建图文视频生成网站教程
  • Dockerfile 核心指令详解与最佳实践指南
  • 程序员进阶指南:精选在线学习、兼职与交流平台汇总
  • 2024 年 3 月编程语言排行榜:Python 优势显著,Rust 持续上升
  • 数据结构:堆与优先级队列
  • KoboldAI 安装与配置指南
  • AI 核心概念速通教程
  • AIGC 时代如何打造卓越技术文档
  • 深度学习模型优化策略与实战调参
  • Llama-2-7b 昇腾 NPU 部署与性能测评实战
  • Windows 系统安装配置 Neo4j 图数据库指南
  • 单链表综合练习:删除指定值节点、反转链表及查找中间节点
  • JavaScript 韦恩图绘制指南:venn.js 库使用详解
  • llama.cpp 本地部署性能调优:从启动瓶颈到推理效率优化
  • C++ STL 常用算法实战指南

相关免费在线工具

  • 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