news 2026/7/7 8:31:29

两两交换链表中的节点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
两两交换链表中的节点

递归解法详解

题目要求两两交换链表中的相邻节点,且不能修改节点的值,只能交换节点本身。递归方法通过分解问题为子问题来实现。

递归思路将链表的前两个节点视为node1node2,交换这两个节点后,node1的下一个节点应指向剩余链表交换后的头节点。递归终止条件是链表为空或只有一个节点。

代码实现(C++)

class Solution { public: ListNode* swapPairs(ListNode* head) { if (head == nullptr || head->next == nullptr) { return head; } ListNode* newHead = head->next; head->next = swapPairs(newHead->next); newHead->next = head; return newHead; } };

执行流程示例输入链表:1 → 2 → 3 → 4

  1. 第一次递归:head=1newHead=2,递归处理3
  2. 第二次递归:head=3newHead=4,递归处理nullptr,返回nullptr
  3. 连接子链表结果:3->next=nullptr4->next=3,返回4
  4. 最终连接:1->next=42->next=1,返回2,结果为2→1→4→3

复杂度分析

  • 时间复杂度:$O(n)$,每个节点处理一次。
  • 空间复杂度:$O(n)$,递归栈深度为$n/2$。

迭代解法补充

迭代思路使用指针遍历链表,每次交换相邻两个节点,并更新指针位置。

代码实现(C++)

class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode dummy(0); dummy.next = head; ListNode* prev = &dummy; while (prev->next && prev->next->next) { ListNode* first = prev->next; ListNode* second = first->next; prev->next = second; first->next = second->next; second->next = first; prev = first; } return dummy.next; } };

执行流程

  1. 初始化虚拟头节点dummyprev指向dummy
  2. 循环中交换firstsecond节点,更新prev->nextfirst->next
  3. 移动prevfirst,继续处理下一对节点。

复杂度分析

  • 时间复杂度:$O(n)$,遍历链表一次。
  • 空间复杂度:$O(1)$,仅使用常数空间。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 7:24:31

本地AI助手技术革新:重新定义你的网页交互体验

在云端AI服务大行其道的今天,你是否曾经担忧过数据隐私问题?是否因为网络不稳定而错失重要分析机会?现在,一款完全本地化的AI助手正悄然改变这一局面。 【免费下载链接】page-assist Use your locally running AI models to assis…

作者头像 李华
网站建设 2026/7/7 10:20:45

终极Windows清理神器:快速解决C盘爆红问题完整指南

还在为C盘变红而烦恼吗?WindowsCleaner这款专为Windows系统打造的开源清理工具,能够帮你快速释放磁盘空间,让电脑运行如飞!😊 本文将为你提供从下载到使用的完整操作流程,无论你是电脑小白还是资深玩家&…

作者头像 李华
网站建设 2026/7/7 18:53:30

LobeChat日志分析技巧:排查错误与优化响应速度

LobeChat日志分析技巧:排查错误与优化响应速度 在构建现代AI对话系统时,模型能力只是用户体验的一半。另一半,往往藏在看不见的日志里——那些被轻易忽略的console.log输出,其实正是决定系统稳定性、响应速度和故障恢复效率的关键…

作者头像 李华
网站建设 2026/7/7 11:03:36

Wallpaper_Engine终极获取指南:快速获取创意工坊壁纸

想要个性化你的电脑桌面吗?厌倦了繁琐的壁纸获取过程?Wallpaper_Engine开源项目正是为你量身打造的创意工坊获取神器!这款基于Flutter和SteamCMD的工具让壁纸获取变得前所未有的简单高效。 【免费下载链接】Wallpaper_Engine 一个便捷的创意工…

作者头像 李华
网站建设 2026/7/7 7:57:31

STM32 HAL 函数大全 · 第 2 卷

UART / USART 模块(通用同步/异步收发器) 版本:v1.0 | 适用系列:STM32F0 / F1 / F3 / F4 / F7 / L0 / L4 / H7 目录 UART 模块简介 通信协议与参数配置 三大工作模式详解 HAL UART API 函数全集 中断与 DMA 回调机制 printf…

作者头像 李华
网站建设 2026/7/7 7:25:00

哔哩下载姬完整使用指南

哔哩下载姬完整使用指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 项目地址: https://gitcode.co…

作者头像 李华