news 2026/5/23 1:29:38

两两交换链表中的节点

作者头像

张小明

前端开发工程师

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/5/21 7:10:03

Docker极简入门:从零到实战

Docker 极简入门实战大纲 第一章:Docker 初识 痛点引入: 开发与部署环境不一致带来的困扰。 Docker 是什么? 不是虚拟机!轻量级容器技术。 核心概念:镜像(Image)、容器(Container)、仓库(Repository)。 类比:镜像 = 软件包 (.exe/.dmg/.deb) + 运行环境 (JDK/Python等),…

作者头像 李华
网站建设 2026/5/19 15:50:31

Spring Boot 应用开发知识点总结

一、Spring Boot 核心原理:理解「约定优于配置」的本质​ Spring Boot 的核心优势在于简化配置、快速开发,其底层依赖两大核心机制:自动配置与 Starter 依赖,这是掌握框架的根本所在。​ 1. 自动配置(AutoConfigurat…

作者头像 李华
网站建设 2026/5/23 1:24:37

窗口置顶神器:3分钟学会让重要窗口永不消失的终极技巧

窗口置顶神器:3分钟学会让重要窗口永不消失的终极技巧 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 还在为重要窗口被其他程序遮挡而烦恼吗?窗口置顶工…

作者头像 李华
网站建设 2026/5/23 14:18:32

Day 16 C++提高之模板

Day 16 C提高之模板 一、模板的概念 模板就是建立通用的模具,大大提高复用性。例如,生活中的模板:一寸照片的模板、PPT模板、论文模板。 模板特点:通用性很强,但是不能直接使用,只是一个框架,模…

作者头像 李华
网站建设 2026/5/23 14:17:25

蓝桥杯 162.通电(Prim算法)

2015 年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。这一次,小明要帮助 nn 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。现在,这 nn 个…

作者头像 李华
网站建设 2026/5/21 23:22:04

ContextMenuManager仿写文章Prompt

ContextMenuManager仿写文章Prompt 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 核心要求 请基于ContextMenuManager项目,创作一篇结构新颖、语气…

作者头像 李华