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

文章目录

  • 24. 两两交换链表中的节点
    • 题目描述
    • 解题思路
      • 只使用一个临时节点
      • 使用两个临时节点

24. 两两交换链表中的节点

题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
在这里插入图片描述

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

示例 2:

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

示例 3:

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

提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

解题思路

  • 在交换两个相邻节点时,需要找到两个相邻节点的前一个结点,才能进行交换
      对于头节点与其相邻的节点,我们只需要使用虚拟头节点就可以交换

只使用一个临时节点

在这里插入图片描述

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* cur=dummyhead;//当节点为偶数时,cur->next指向空指针停止//当节点为奇数时,cur->next->next为空指针时停止//cur->next!=nullptr要放在cur->next->next!=nullptr前面,不然会导致空指针异常//当节点为偶数时,原本cur->next已经指向空指针,cur->next->next!=nullptr放在前面会先判断,从而导致空指针异常while(cur->next!=nullptr&&cur->next->next!=nullptr){ListNode* tmp=cur->next;//步骤一:保存1cur->next=cur->next->next;//步骤二:cur->2tmp->next=cur->next->next;//步骤三:1->3;cur->next->next=tmp;//步骤四:2->3cur=cur->next->next;// cur移动两位,准备下一轮交换}return dummyhead->next;}
};

错误代码
这是我写的一个错误代码,原因是没弄懂tmp临时节点,我以为先将tmp指向节点3,然后再将cur指向2,节点2再指向1,就可以连起来,但是操作了临时节点就相当于操作了临时节点保存的节点1(因为二者地址相等)从而导致丢失了节点2的地址
在这里插入图片描述

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* cur=dummyhead;while(cur->next!=nullptr&&cur->next->next!=nullptr){ListNode* tmp=cur->next;//保存1tmp->next=cur->next->next->next;//1->3cur->next=cur->next->next;//cur->2cur->next->next=tmp;//2->1cur=cur->next->next;}return dummyhead->next;}
};

使用两个临时节点

在这里插入图片描述

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* cur=dummyhead;while(cur->next!=nullptr&&cur->next->next!=nullptr){ListNode* tmp1=cur->next;//保存1ListNode* tmp2=cur->next->next->next;//保存3cur->next=cur->next->next;//步骤一:cur->2cur->next->next=tmp1;//步骤二:2->1tmp1->next=tmp2;//步骤三:1(tmp1)->3// cur移动两位,准备下一轮交换cur=cur->next->next;}// 返回链表的新头节点,即虚拟头节点的下一个节点ListNode* newhead=dummyhead->next;delete dummyhead; // 删除虚拟头节点以防止内存泄漏return newhead;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【国产MCU】-认识CH32V307及开发环境搭建

认识CH32V307及开发环境搭建 文章目录 认识CH32V307及开发环境搭建1、CH32V307介绍2、开发环境搭建3、程序固件下载1、CH32V307介绍 CH32V307是沁恒推出的一款基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度…

【极数系列】Flink集成DataSource读取集合数据(07)

文章目录 01 引言02 简介概述03 基于集合读取数据3.1 集合创建数据流3.2 迭代器创建数据流3.3 给定对象创建数据流3.4 迭代并行器创建数据流3.5 基于时间间隔创建数据流3.6 自定义数据流 04 源码实战demo4.1 pom.xml依赖4.2 创建集合数据流作业4.3 运行结果日志 01 引言 源码地…

(免费分享)springboot,vue在线考试系统

springboot 在线考试系统 前后端分离 一、项目简介 基于SpringBoot的在线考试系统 二、技术实现 后台框架&#xff1a;SpringBoot&#xff0c;mybatis-plus UI界面&#xff1a;Vue、ElementUI、Axios、Node.js&#xff08;前后端分离&#xff09; 数据库&#xff1a;MySQ…

C++ 类与对象(上)

目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…

HDFS Federation前世今生

一 背景 熟悉大数据的人应该都知道&#xff0c;HDFS 是一个分布式文件系统&#xff0c;它是基于谷歌的GFS实现的开源系统&#xff0c;设计目的就是提供一个高度容错性和高吞吐量的海量数据存储解决方案。在经典的HDFS架构中有2个NameNode和多个DataNode&#xff0c;如下 从上面…

备战蓝桥杯---二分(基础)

何为二分&#xff1f;形象的说&#xff0c;就是单调函数求零点。 我们先对二分查找简单的分析一下&#xff08;主要是模板及易错点&#xff09; 1.找>x的第一个位置&#xff1a; 2.找<x的第一个位置&#xff1a; …

Golang 流媒体服务器lalserver使用指南

目录 安装 使用 1.推流 2.播放 官方地址 安装 1.下载源码 wget https://github.com/q191201771/lal/releases/download/v0.36.7/lal_v0.36.7_linux.zipunzip lal_v0.36.7_linux.zip cd lal_v0.36.7_linux 2.启动 ./bin/lalserver -c ./conf/lalserver.conf.json 使用 …

Matlab基础语法

基础语法 %% Matlab基本的小常识 % (1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子&#xff1b;)表示不显示运行结果 a 3; a 5% (2)多行注释:选中要注释的若干语句,快捷键CtrlR % a 3; % a 5% (3)取消注释:选中要取消注释的语句,快捷键CtrlT % 我想要取…

JSP仓储管理系统myeclipse定制开发SQLServer数据库网页模式java编程jdbc

一、源码特点 JSP仓储管理系统系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库 &#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为SQLServer2008&#x…

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算…

leetcode刷题(剑指offer) 237.删除链表中的节点

237.删除链表中的节点 有一个单链表的 head&#xff0c;我们想删除它其中的一个节点 node。 给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。 链表的所有值都是 唯一的&#xff0c;并且保证给定的节点 node 不是链表中的最后一个节点。 删除给定的节点。注…

网站地址怎么改成HTTPS?

现在&#xff0c;所有类型的网站都需要通过 HTTPS 协议进行安全连接&#xff0c;而实现这一目标的唯一方法是使用 SSL 证书。如果您不将 HTTP 转换为 HTTPS&#xff0c;浏览器和应用程序会将您网站的连接标记为不安全。 但用户询问如何将我的网站从 HTTP 更改为 HTTPS。在此页…