Leetcode-每日一题【1721.交换链表中的节点】

news2024/11/15 15:39:31

题目

给你链表的头节点 head 和一个整数 k 。

交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。

示例 1:

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


示例 2:

输入:head = [7,9,6,6,7,8,3,0,9,5], k = 5
输出:[7,9,6,6,8,7,3,0,9,5]

 

示例 3:

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


示例 4:

输入:head = [1,2], k = 1
输出:[2,1]


示例 5:

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

 

提示:

链表中节点的数目是 n
1 <= k <= n <= 105
0 <= Node.val <= 100

解题思路

1.设置一个 cur 节点和 excaim 节点,用于找出所要交换的两个节点。

2.让 cur 利用 for 循环对链表进行遍历找到第 k 个节点,再设置一个 aim 节点,将 cur 指向的第 k 个节点保存在 aim 节点中。

3.此时 cur 节点到 head 节点的距离就等于我们要交换的后一个节点到尾节点的距离,所以我们让 excaim 节点和 cur 节点利用 while 循环对链表进行遍历,当 cur 指向尾节点时,excaim节点也就指向了我们要交换的后一个节点。

4.最后我们只需要交换 aim 和 excaim 的值,并返回 head 即可。

举个栗子:

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

(1)设置一个 cur 节点和 excaim 节点

 (2)让 cur 利用 for 循环对链表进行遍历找到第 k 个节点

(3)找到后我们将 cur 保存在 aim 中 

(4)此时 cur 节点到 head 节点的距离就等于我们要交换的后一个节点到尾节点的距离,所以我们让 excaim 节点和 cur 节点利用 while 循环对链表进行遍历

  

 

(5)此时cur.next = null ,也就是说 cur 已经到达了尾节点,excaim 指向的就是我们要进行交换的后一个节点, 我们只需要交换 aim 和 excaim 的值,并返回 head 即可。

 

代码实现

class Solution {
    public ListNode swapNodes(ListNode head, int k) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode excaim = head;
        ListNode cur = head;
        for(int i = 1; i < k; i++){
            cur = cur.next;
    }
        ListNode aim = cur;
    //此时aim指向要交换的前一个结点
    while(cur.next != null){
        excaim = excaim.next;
        cur = cur.next;
    }
    //此时excaim指向要交换的后一个节点
    int temp = excaim.val;
    excaim.val = aim.val;
    aim.val = temp;
    return head;
 
    
    }
}

测试结果

 

 

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

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

相关文章

816. 数组翻转

链接&#xff1a; 链接 题目&#xff1a; 给定一个长度为 nn 的数组 aa 和一个整数 sizesize&#xff0c;请你编写一个函数&#xff0c;void reverse(int a[], int size)&#xff0c;实现将数组 aa 中的前 sizesize 个数翻转。 输出翻转后的数组 aa。 输入格式 第一行包含两个整…

高德地图通过图层layer实现对海量点的可视化渲染

一、可视化海量点应用场景 在正文开始之前我先说说我为啥会使用这个技术来实现数据的可视化。 事情是这样的&#xff0c;我接手了一个项目&#xff0c;里面有个需求是在地图上标记出他们公司的产品的使用分布。我接手的时候呢&#xff0c;我前面的那位大哥是使用marker点覆盖物…

Spark(19):SparkSQL中数据的加载和保存

目录 0. 相关文章链接 1. 通用的加载和保存方式 1.1. 加载数据 1.2. 保存数据 2. Parquet 2.1. 加载数据 2.2. 保存数据 3. JSON 4. CSV 5. MySQL 5.1. 导入依赖 5.2. 读取数据 5.3. 写入数据 6. Hive 6.1. SparkSQL连接Hive 6.2. 内嵌的 HIVE 6.3. 外部的 HI…

FastDFS文件系统

FastDFS文件系统 环境代码实现 一.FastDFS 1.什么是FastDFS FastDFS:Fast Distributed File System,快速的分布式文件系统,是一款用c语言开发的开源的分布式文件系统. FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制&#xff0c;充分考虑了…

前端漏洞xss

网络钓鱼、获取Cookie、强制弹窗获取流量、网站挂马(将恶意代码嵌入程序&#xff0c;用户浏览页面时计算机将被嵌入木马)、发送垃圾信息或广告、传播蠕虫病毒 漏洞原理 XSS(Cross Site Scripting),是一种跨站的脚本攻击&#xff0c;曾简称为CSS&#xff0c; 后改为XSS。 攻击…

springboot在线考试

在线考试系统的开发运用java技术&#xff0c;MIS的总体思想&#xff0c;以及MYSQL等技术的支持下共同完成了该系统的开发&#xff0c;实现了在线考试管理的信息化&#xff0c;使用户体验到更优秀的在线考试管理&#xff0c;管理员管理操作将更加方便&#xff0c;实现目标.

Dell服务器的iDRAC管理卡连接

Dell服务器的iDRAC管理卡图文教程 1、网线连接idrac口2、查看idrac地址3、匹配IP地址4、web登录idrac页面5、登录成功页面 带有集成戴尔远程访问控制器 &#xff08;idrac&#xff09;的系统具有默认用户名和密码&#xff0c;但您也可以使用安全密码对其进行配置。默认使用web浏…

在idea中添加mapper.xml文件模板

文章目录 1、创建模板2. 创建mapper.xml文件 1、创建模板 打开创建模板页面 位置&#xff1a;File-》Settings-》Editor-》File and Code Templates 点击号&#xff0c;新建模板&#xff0c;填入Name&#xff08;随意&#xff09;、Extension&#xff08;必须为xml&#xff…

hadoop安装集群搭建

准备工作&#xff1a; 1&#xff0c;创建一台虚拟机&#xff0c;安装java jdk 这里选择1.8 2&#xff0c;给虚拟机并配置好静态IP地址 一&#xff1a;Java jdk安装 1.1检查安装环境&#xff0c;是否已安装其他版本的jdk&#xff0c;有的话卸载。 # 查看系统JDK进程 [rooth…

PSINS工具箱学习(二)姿态阵、四元数、欧拉角、等效旋转矢量的概念和转换

上一篇博客&#xff1a;PSINS工具箱学习&#xff08;一&#xff09;下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示 文章目录 一、基础概念1、坐标系定义1. 惯性坐标系&#xff08; i 系 &#xff09;2. 地心地固坐标系&#xff08; e…

solr快速上手:搭建solr集群并创建核心,设置数据同步(十一)

0. 引言 前几章我们已经讲解了solr单机版的基本使用&#xff0c;但实际生产中&#xff0c;为了保证高可用、高性能&#xff0c;我们一般会采用集群模式&#xff0c;所以接下来&#xff0c;我们继续讲解solr集群的搭建和基本操作 1. 集群模式 1.1 分片 在讲解solr集群模式前…

【七天入门数据库】第二天 数据库理论基础

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 文章目录 一、什么是数据库 二、数据库管理系统DBMS 三、数据库与文件系统的区分 四、数据库的发展史 五、…

选择屏幕文本元素

标题 列标题 当你使用write语句时才能展现使用. 效果: 选择屏幕文本符号

前端Vue自定义tabs标题栏选项卡组件 可设置文字color

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

7.10 qt作业

闹钟 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QIcon> #include <QLabel> #include <QTextEdit> #include <QPushButton> #include <QLineEdit> #include <QPainter> #include <…

实现临界区互斥访问的基本方法

1. 问题引入 在我们之前的生产者与消费者问题中, 在文章的最后, 我们曾尝试过把我们的代码封装成P()和V()操作, 结果却以失败告终. 归根结底是因为我们无法在不使用mutex的情况下来完成对临界区的互斥访问, 本篇文章我们就来探讨一下, 如何不使用mutex实现临界区的互斥访问. …

形态学操作

目录 1、腐蚀 1.1 腐蚀目的 1.2 原理与代码实现 2、膨胀 3、应用 3.1 开闭运算、形态学梯度 3.1.1 开运算 3.1.2 闭运算 ​编辑 3.1.3 形态学梯度 ​编辑 3.1.4 顶帽与黑帽运算 3.2 相关函数 形态学操作常用于对二值化图像的操作 1、腐蚀 1.1 腐蚀目的 去除图像中…

[工业互联-22]:常见EtherCAT主站方案:Acontis公司的商用Windows 解决方案

目录 前言&#xff1a;非实时、纯软件解决方案 1.1 概述 1.2 缺点 1.3 实时性思路 方案1&#xff1a;非实时性能的解决方案&#xff1a;etherCAT优化网卡驱动程序 方案2&#xff1a;EtherCAT内核调度模块EcatDrv 方案3&#xff1a;具有硬实时性能的解决方案&#xff1a;…

【C++】C++创建动态链接库并调用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#x1f95e; 文章目…

车载蓝牙通信开发之各种协议原理解析

车载蓝牙开发需要考虑到蓝牙协议栈集成、连接管理、电话功能集成、媒体播放控制、数据交换和服务发现、安全性和隐私保护等方面。这对于实现车辆与蓝牙设备之间的无线通信和交互功能非常关键。 使车辆能够与蓝牙设备进行通信和交互的开发过程。 蓝牙协议栈集成&#xff1a; …