news 2026/6/23 23:27:15

两两交换链表中的节点

作者头像

张小明

前端开发工程师

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/6/23 21:32:32

客户群 ID 与业务 ID 映射:设计高性能数据库表结构,实现 ChatID 与内部业务标签的快速关联

在完成了 ChatID 的同步后,下一步的关键是建立一套高效的数据模型,将企业微信的 ChatID 与我们业务系统的 客户标签、产品线、生命周期阶段等属性关联起来,这是实现精准群发目标筛选的基础。 1. 映射模型的必要性 企业微信 API 只提供群聊 …

作者头像 李华
网站建设 2026/6/23 17:26:27

代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II

KamaCoder108.冗余连接 108. 多余的边 1.思路 对于边 (s, t),使用 find(s) 和 find(t) 分别查找 s 和 t 所在集合的根节点。 如果根节点相同:说明 s 和 t 本来就在同一个集合中,即它们已经连通。此时,边 (s, t) 的加入必定会形成…

作者头像 李华
网站建设 2026/6/23 21:30:32

微信网页版访问困境突破:3步安装wechat-need-web插件实战指南

你是否曾经在工作中急需使用微信网页版,却遭遇访问限制的困扰?在数字化办公时代,微信已经成为我们日常沟通不可或缺的工具,但网页版的访问问题却让无数用户头疼不已。今天,我们将为你揭秘一个简单有效的解决方案&#…

作者头像 李华
网站建设 2026/6/23 2:35:28

MFC扩展库BCGControlBar Pro v37.1——支持Visual Studio 2026

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v37.1已全新发布了,新版本增加了对Visual Studio 2026的支持(仅限…

作者头像 李华
网站建设 2026/6/23 21:32:45

知乎专题策划:LobeChat是否真的值得入手?

LobeChat 是否值得入手?一场关于自主 AI 未来的深度思考 在大模型浪潮席卷全球的今天,我们早已不再惊讶于 AI 能写诗、编程或回答复杂问题。真正让人纠结的是:如何安全、可控地使用这些能力? 当你在 ChatGPT 中输入一段代码需求时…

作者头像 李华