当前位置: 首页 > 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/

相关文章:

  • 融智学16字方针无歧义表述并构建人机协同的非零和博弈模型
  • SVM实战:从理论到鸢尾花数据集的分类可视化
  • Android 端如何监控 ANR、Crash、OOM 等严重问题
  • 基于SpringBoot+Vue实现的电影推荐平台功能三
  • Oracle OCP认证考试考点详解083系列04
  • ip和域名
  • hadoop存储数据文件原理
  • 大数据Spark(五十八):Spark Pi介绍
  • 49-dify案例分享-私有化 MCP 广场搭建与网页小游戏智能体工作流实战
  • 【Bootstrap V4系列】学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb)
  • C++ 开发指针问题:E0158 表达式必须为左值或函数指示符
  • 【React】Hooks useReducer 详解,让状态管理更可预测、更高效
  • ActiveMQ 集群搭建与高可用方案设计(一)
  • Hal库下备份寄存器
  • Spring Boot的GraalVM支持:构建低资源消耗微服务
  • 高中数学联赛模拟试题精选学数学系列第5套几何题
  • 深度学习核心架构:探明四种基础神经网络
  • STM32部分:2、环境搭建
  • Linux53 百度网盘运行(下载devtoolset11后仍提示stdc++3.0.29缺失 计划用docker容器隔离运行,计划后续再看)
  • 私人医生通过AI分析基因数据,是否有权提前告知癌症风险?
  • 美政府称不再对哈佛大学提供联邦资助
  • 侯麦:从莫扎特到贝多芬
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业
  • 艺术开卷|韩羽读齐白石:妙在似与不似之间
  • 言短意长|今年五一假期的一个新变化
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机