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

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

解题思路:
首先设置一个头结点,方便统一操作。

设置cur指针从头结点开始向后遍历,

设置firstNode指针,指向cur后的第一个结点,

设置secondNode指针,指向cur后的第二个结点,

设置temp指针,指向secondNode后的结点,即cur后的第三个结点,用来保存下一步要成对交换的第一个结点。

交换时要理清顺序:
先把第二个结点移到第一个结点的位置,所以需要修改cur.next和secondeNode.next;

然后修改firstNode.next

交换完后,cur应该指向temp的前一个结点,此时的firstNode指针就是指向了temp的前一个结点,所以交换完后,cur的下一步应该到firstNode。

代码如下:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {// 设置一个头结点 ListNode Node = new ListNode(-1);Node.next = head;ListNode cur = Node; // cur指针初始指向头结点,从前向后遍历ListNode firstNode = null; // 临时指针,保存cur后的第一个结点ListNode secondNode = null; // 临时指针,保存cur后的第二个结点ListNode temp = null; // 临时指针,保存cur后第二个结点的后一个结点while(cur.next != null && cur.next.next != null) {firstNode = cur.next;secondNode = cur.next.next;temp = cur.next.next.next;cur.next = secondNode;secondNode.next = firstNode;firstNode.next = temp;cur = firstNode; // cur往后移动}return Node.next;}
}

 

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

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

相关文章

MindSporeLite之converter_lite模型转换工具和benchmark模型推理工具

一、参考资料 MindSporeLite官方文档 二、准备工作 0. 系统环境 Environment Operating System Version: Ubuntu 16.04 CPU Type: AMD Ryzen 5 5600X 6-Core Processor3.7GHz RAM: 32GB MindSporeLite Version: r2.0 Python Version (if applicable): 3.9.5 PyTorch Ver…

IP网络对讲广播系统审计

前言 这个系统是前两年在一个内网遇到的&#xff0c;当时顺手试了一个admin登陆之后再没有然后了&#xff0c;最近发现有大佬分享关于这个系统的漏洞&#xff0c;于是就把自己当初看的几个漏洞分享一下&#xff0c;系统比较简单&#xff0c;漏洞点很多&#xff0c;不要做坏事哦…

蓝桥杯刷题-12-公因数匹配-数论(分解质因数)不是很理解❓❓

蓝桥杯2023年第十四届省赛真题-公因数匹配 给定 n 个正整数 Ai&#xff0c;请找出两个数 i, j 使得 i < j 且 Ai 和 Aj 存在大于 1 的公因数。 如果存在多组 i, j&#xff0c;请输出 i 最小的那组。如果仍然存在多组 i, j&#xff0c;请输出 i 最小的所有方案中 j 最小的那…

K8s学习九(配置与存储_存储)

存储管理 Volumes HostPath 将节点上的文件或目录挂载到 Pod 上&#xff0c;此时该目录会变成持久化存储目录&#xff0c;即使 Pod 被删除后重启&#xff0c;也可以重新加载到该目录&#xff0c;该目录下的文件不会丢失 效果就是容器里的数据和主机里的数据进行共享 配置文…

【grpc】二、grpc入门,基本使用方法

上篇介绍了使用protobuf生成grpc相关代码&#xff0c;并实现了服务端方法&#xff0c;本篇介绍下具体的使用。 一、服务端 // server.gopackage mainimport ("google.golang.org/grpc""grpcDemo/calc""net" )func startServer(addr string) {//…

鸿蒙ArkUI声明式学习:【UI资源管理】

OpenHarmony 应用的资源分类和资源的访问以及应用开发使用的像素单位以及各单位之间相互转换的方法。 资源分类 移动端应用开发常用到的资源比如图片&#xff0c;音视频&#xff0c;字符串等都有固定的存放目录&#xff0c;OpenHarmony 把这些应用的资源文件统一放在 resourc…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

AI资讯2024-04-08 | 斯坦福大学推出手机端运行大模型—Octopus v2,性能超越GPT-4

关注文章底部公众号可获取每日AI新闻,还有更多好玩使用的黑科技工具分享 斯坦福大学推出可在手机端运行大模型—Octopus v2 Octopus-V2-2B 是一个拥有 20 亿参数的开源语言模型,专为 Android API 量身定制,旨在在 Android 设备上无缝运行,并将实用性扩展到从 Android 系统…

【学习】移动端App性能测试流程有哪些

移动端App性能测试是保证App性能表现的重要环节之一。随着移动设备的普及和移动互联网的发展&#xff0c;移动端App的性能测试变得越来越重要&#xff0c;通过科学合理的性能测试可以发现并解决潜在的性能问题优化App运行效果提高用户体验。性能测试旨在评估App在各种场景下的性…

射影几何基础

射影几何基础 文章目录 射影几何基础2D2D点2D直线二次曲线 3D3D点3D 平面3D直线 2D 2D点 欧氏空间中的笛卡尔坐标&#xff0c;缩放、旋转和仿射变换能表示成矩阵运算&#xff08;线性&#xff09; &#xff1b; 但平移变换和透视投影不能表示成矩阵相乘。所以为了解决这个问题…

2024年最新可用免费云服务器整理汇总

随着云计算技术的不断发展&#xff0c;越来越多的个人和企业开始使用云服务器来满足其数据存储、网站搭建、应用开发等需求。其中&#xff0c;免费云服务器更是受到广大用户的青睐。本文将为大家整理汇总最新的可用免费云服务器资源&#xff0c;助力大家轻松享受云上之旅&#…

mos管开关出现尖峰的原理? mos管开关的时候cs会出现尖峰,请问这是什么原因?

MOS管在开关过程中出现尖峰现象&#xff0c;通常是由于电路中的寄生参数和快速电压变化引起的。以下是一些导致尖峰出现的主要原因和原理&#xff1a; 寄生电容 在MOS管的源极&#xff08;S&#xff09;和漏极&#xff08;D&#xff09;之间存在寄生电容&#xff0c;这个电容在…