当前位置: 首页 > news >正文

力扣:24两两交换链表的节点

目录

1.题目描述:

2.算法思路:

3.代码展示:


1.题目描述:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

2.算法思路:

给定的代码是一个C++函数,名为swapPairs,接受一个ListNode*类型的头节点指针head,返回交换后的链表头节点。代码的主要步骤如下:

  1. 创建一个虚拟头节点dummy,其next指向head
  2. 初始化一个指针temp指向dummy
  3. 使用while循环,条件是temp->nexttemp->next->next都不为空。
  4. 在循环内部:
    • 定义node1temp->next
    • 定义node2temp->next->next
    • 调整指针:
      • temp->next指向node2
      • node1->next指向node2->next
      • node2->next指向node1
    • 移动tempnode1
  5. 返回dummy->next,即交换后的链表头节点。

逐步解析

让我们通过一个具体的例子来逐步解析代码的执行过程。假设输入链表为:1 -> 2 -> 3 -> 4。

​初始状态:​

dummy(0) -> 1 -> 2 -> 3 -> 4
temp = dummy

​第一次循环:​

  • node1 = temp->next = 1
  • node2 = temp->next->next = 2

调整指针:

  1. temp->next = node2dummy(0) -> 2
  2. node1->next = node2->next1 -> 3
  3. node2->next = node12 -> 1

此时链表:

dummy(0) -> 2 -> 1 -> 3 -> 4
temp = node1 = 1

​第二次循环:​

  • node1 = temp->next = 3
  • node2 = temp->next->next = 4

调整指针:

  1. temp->next = node21 -> 4
  2. node1->next = node2->next3 -> nullptr(因为node2->next4的下一个,为空)
  3. node2->next = node14 -> 3

此时链表:

dummy(0) -> 2 -> 1 -> 4 -> 3
temp = node1 = 3

​第三次循环:​

检查temp->nexttemp->next->next

  • temp->next3->next,即nullptr
  • 不满足循环条件,退出循环。

​返回结果:​

dummy->next指向2,即交换后的链表头节点。

最终链表:2 -> 1 -> 4 -> 3

3.代码展示:

ListNode* swapPairs(ListNode* head) {//创建一个头节点,便于后续的操作ListNode* dummy = new ListNode(0);ListNode* temp = dummy;//temp的下一个节点和temp的下一个的下一个节点,同时存在才可以进行交换操作while (temp->next && temp->next->next){ListNode* node1 = temp->next;ListNode* node2 = temp->next->next;temp->next = node2;node1->next = node2->next;node2->next = node1;temp = node1;}return dummy->next;
}

24. 两两交换链表中的节点 - 力扣(LeetCode)https://leetcode.cn/problems/swap-nodes-in-pairs/description/

http://www.xdnf.cn/news/261217.html

相关文章:

  • 搭建一个 gRPC 服务端和客户端
  • 【Java学习】关于springBoot的自动配置和起步依赖
  • CSS 预处理器 Sass
  • 【2025软考高级架构师】——案例分析总结(13)
  • 如何写好大模型提问提示词:从入门到精通的实战指南
  • 华为云Flexus+DeepSeek征文|快速搭建Dify LLM应用开发平台教程
  • 启发式算法-蚁群算法
  • 2.2 矩阵
  • 前端跨域问题怎么在后端解决
  • flutter3.29 build.gradle.kts设置安卓签名
  • 吾爱出品 [Windows] EndNote 21.5.18513 汉化补丁
  • Linux中安装mysql8,转载及注意事项
  • 机器学习_线性回归
  • QT中的JSON
  • Python 装饰器优化策略模式:电商促销折扣的优雅解法
  • 【网络原理】深入理解HTTPS协议
  • 多多铃声 7.4| 拥有丰富的铃声曲库,满足不同用户的个性化需求,支持一键设置手机铃声
  • 接口隔离原则(ISP)
  • 「Mac畅玩AIGC与多模态15」开发篇11 - 增加输入变量的工作流示例
  • 用定时器做微妙延时注意事项
  • LOJ #193 线段树历史和 Solution
  • day13 python不平衡数据集的处理(补)
  • 数字智慧方案5857丨智慧机场解决方案与应用(53页PPT)(文末有下载方式)
  • 分享国产AI工作流集成数据库完成业务处理
  • apt-mirror搭建ubuntu本地离线源
  • 文件操作--文件下载读取漏洞
  • JavaScript基础-赋值运算符
  • python数据分析(七):Pandas 数据变形与重塑
  • DeepSeek实战--AI技术架构(持续更新)
  • Performance API 性能上报