125.两两交换链表中的节点(力扣)

题目描述

代码解决及思路

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode*dummyHead=new ListNode(0);  //设置一个虚拟头节点dummyHead->next=head;                //让虚拟头节点指向真正的头节点ListNode*cur=dummyHead; ListNode*temp;//临时节点ListNode*temp1;//临时节点1while(cur->next!=nullptr&&cur->next->next!=nullptr){temp=cur->next;//记录临时节点temp1=cur->next->next->next;cur->next=cur->next->next;cur->next->next=temp;cur->next->next->next=temp1;cur=cur->next->next;//移动头节点  进行下一次操作}ListNode*result=dummyHead->next;delete dummyHead;return result;}
};

这段代码实现了链表中的两两交换节点功能。具体来说,它将链表中相邻的两个节点进行交换,如果链表中的节点数为奇数,那么最后一个节点保持不变。

下面是代码的详细解释:

  1. 首先,定义了一个ListNode结构体,它包含一个整型值val和一个指向下一个节点的指针next

  2. Solution类中,定义了一个swapPairs函数,它接受链表的头节点head作为参数,并返回交换后的链表的头节点。

  3. swapPairs函数中,首先创建了一个虚拟头节点dummyHead,它的val设置为0,next指向head。这个虚拟头节点的目的是为了方便操作,避免处理头节点交换的特殊情况。

  4. 然后,初始化了三个指针curtemptemp1cur指向虚拟头节点dummyHeadtemptemp1用于在交换过程中临时保存节点。

  5. 使用一个while循环来遍历链表,循环的条件是cur的下一个节点和下下个节点都不为空,即至少还有两个节点可以交换。

  6. 在循环内部,首先使用temp保存cur的下一个节点,即第一个要交换的节点。

  7. 然后,使用temp1保存cur的下一个节点的下一个节点的下一个节点,即第三个节点。

  8. 接下来,进行节点交换:

    • curnext指向cur的下一个节点的下一个节点,即第二个节点。
    • cur的下一个节点的next指向temp,即第一个节点。
    • tempnext指向temp1,即第三个节点。
  9. 最后,将cur移动到cur的下一个节点的下一个节点,即移动到交换后的第二个节点,为下一次交换做准备。

  10. 当循环结束后,dummyHead的下一个节点就是交换后的链表的头节点。将这个节点赋值给result,并删除虚拟头节点dummyHead

  11. 函数返回交换后的链表的头节点result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3016566.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

很快就可以试用Domino 15了

大家好,才是真的好。 前几天在比利时的安普卫特举办的Engage2024大会已经结束,流出的现场照片很多,主要是会议场地照片很多,说是令人震撼;可惜这次一手的PPT和会议内容不多.是的,本来我也是在等与会者写的…

VMware 虚拟机打开一段时间后卡死,VNX进程CPU占比高

一、问题描述 打开虚拟机后可以正常运行 运行几分钟后突然卡死 然后通过任务管理器可以观察到VMware Workstation VMX应用进程的CPU占比高,CPU也出现异常 关闭虚拟机重新开启,还是一样卡死 二、系统环境 系统: Windows10 VMware: Workstation 17 Pro …

如何提取视频二维码链接?二维码在线提取链接的方法

随着现在二维码用途的不断增多,很多不同的内容都可以生成二维码来展示,比如现在视频二维码就是比较常见的一种类型,一般用于产品介绍、教程演示、宣传推广等等。二维码的方式在某些情况下也有局限性,当无法扫码时就无法查看内容&a…

Linux信号捕捉

要处理信号, 我们进程就得知道自己是否收到了信号, 收到了哪些信号, 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表, 什么时候进行检测呢? 当我们的进程从内核态返回到用户态的时候&…

荷香堪筑梦,鸳鸯和月寻。(变相BFS搜索)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 3 4 2 .... ***. ..a. 输出 yes 思路: 根据题意,这里 1 s 可以移动多次,我们将每次可以移动避开雪的的位置存储起来,判断当…

springboot3常用注解使用

组键注册注解 组件注册步骤总结 条件注解 演示示例 属性绑定注解 ConfigurationProperties进行绑定 EnableConfigurationProperties进行绑定 其他常用注解 EnableAutoConfiguration ComponentScan RequestMapping GetMapping PostMapping Autowired Resource Servi…

js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

浏览器几种常见的post请求方式 Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认表单数据会编码为 "application/x-www-form-urlencoded" post请求的参数一般放在Body里。 Content-Type(内容类型),一般…

25-ESP32-S3 内置的真随机数发生器(RNG)

ESP32-S3 内置的真随机数发生器(RNG)😎 引言 📚 在许多应用中,随机数发生器(RNG)是必不可少的。无论是在密码学🔒、游戏🎮、模拟🧪或其他领域,随…

【第6节课笔记】LagentAgentLego

Lagent 最中间部分的是LLM,即为大语言模型模块,他可以思考planning和调用什么action,再将其转发给动作执行器action executer执行。 支持的工具如下: Arxiv 搜索 Bing 地图 Google 学术搜索 Google 搜索 交互式 IPython 解释器 IP…

6.Nginx

Nginx反向代理 将前端发送的动态请求有Nginx转发到后端服务器 那为何要多一步转发而不直接发送到后端呢? 反向代理的好处: 提高访问速度(可以在nginx做缓存,如果请求的是同样的接口地址,这样就不用多次请求后端&#…

【数据结构】C/C++ 带头双向循环链表保姆级教程(图例详解!!)

目录 一、前言 二、链表的分类 🥝单链表 🥝双链表 🥝循环链表 🥝带头双向循环链表 🍍头节点(哨兵位)的作用 ✨定义: ✨作用: 🍇总结 三、带头双向循环链表 …

一键解密,网络安全神器现已问世!

一、简介 当前版本V1.1这款工具是一款功能强大的网络安全综合工具,旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能,包括解密、分析、扫描、溯源等,为用户提供了便捷的操作界面和丰富的功…

Python Dash库:一个Web应用只需几行代码

大家好,在数据科学领域,数据可视化是将数据以图形化形式展示出来,帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash,Dash以其简洁、高效和强大的功能而闻名,它允许开发者快速构建交互式Web应用…

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作,这就容易导致采取了OOD的数据。因此,IQL取消max,,通过一个期望回归算子…

STM32接入CH340芯片的初始化进入升级模式(死机)问题处理

目录 1. 问题描述2. 问题分析2.1 CH340G/K 的初始化波形2.2 第1种USB升级电路2.3 第2种USB升级电路2.4 第3种USB升级电路2.5 第4种USB升级电路 3. 总结 1. 问题描述 我所用的CH340G(CH340K也用过)接在MCU的电路中,在插入CH340G/K 的接插件&a…

【一刷《剑指Offer》】面试题 16:反转链表

力扣对应题目链接:206. 反转链表 - 力扣(LeetCode) 牛客对应题目链接:反转链表_牛客题霸_牛客网 (nowcoder.com) 核心考点 :链表操作,思维缜密程度。 一、《剑指 Offer》内容 二、分析题目 解题思路&#…

程序员的实用神器:助力软件开发的利器 ️

程序员的实用神器:助力软件开发的利器 🛠️ 程序员的实用神器:助力软件开发的利器 🛠️引言摘要自动化测试工具:保障代码质量的利剑 🗡️编写高效测试用例 持续集成/持续部署工具:加速交付的利器…

Richard 林旅强:说说社区的故事和对 RTE 社区的畅想

各位 RTE 开发者社区的小伙伴们,大家好: 我是 Richard 林旅强,今年起开始担任我们 RTE 社区联合主理人,很荣幸能在这里跟杜金房老师和陈靖老师一起做点事情,为社区的大家服务 😃 今天想跟各位分享&#x…

重学SpringBoot3-SPI机制

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-SPI机制 什么是 SPI?Spring Boot 中的 SPI 机制spring.factories 文件自动配置的实现启动流程中的作用 SPI实际应用步骤 1: 新建模块步骤 2:…

[Java EE] 多线程(九):ReentrantLock,Semaphore,CountDownLatch与线程安全的集合类(多线程完结)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …