leetcode hot100【LeetCode 24. 两两交换链表中的节点】java实现

devtools/2024/10/23 9:01:30/

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

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表
你不能只是单纯地改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

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

示例 2:

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

示例 3:

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

Java 实现解法

方法:迭代
java">/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {if (head == null || head.next == null) {return head;}ListNode dummy = new ListNode(0);dummy.next = head;ListNode curr = dummy;while (curr.next != null && curr.next.next != null) {ListNode first = curr.next;ListNode second = curr.next.next;// 交换节点first.next = second.next;curr.next = second;second.next = first;// 移动到下一对节点curr = first;}return dummy.next;}
}

解题思路

  • 迭代方法:从头节点开始遍历链表,检查当前节点的下一个节点是否不为空(即有节点可以交换)。
    • 如果有节点可以交换,那么获取当前节点的下一个节点(first)和下下一个节点(second)。
    • first 节点的 next 指向 second 节点的 next,从而将 second 节点从链表中断开。
    • curr 节点的 next 指向 second 节点,将 second 节点插入到 curr 节点之后。
    • second 节点的 next 指向 first 节点,完成节点的交换。
    • 更新 curr 指针到 first 节点,以便下一次迭代交换下一对节点。
  • 处理边界情况:如果链表为空或者只有一个节点,直接返回头节点,因为没有节点可以交换。

这种方法的时间复杂度是 O(n),其中 n链表的长度。空间复杂度是 O(1),因为我们只使用了有限的额外空间来存储指针。这种方法简单且高效,是解决链表节点交换问题的标准方法。

注:题目来源leetcode网站


http://www.ppmy.cn/devtools/128121.html

相关文章

MQTT远程串口、远程TCP透传工具

工具说明 下载地址:远程串口工具 – ARMFUN V0.1.1 增加mqtt clientid可设置 *以前的clientid是随机数,现在注意防止clientid重复导致无法连接 V0.1: 1,TCP可以选择服务器端模式或者客户端模式,只能选择一个,注意…

QT日志库:log4Qt及Qt自带日志库使用

介绍 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为 Log4Qt的直接资料太少了)。 Log4Qt主要是用来记录日志(…

[Vue3核心语法] setup语法糖

一、setup 概述 setup是Vue3中一个新的配置项,值是一个函数,它是 Composition API “表演的舞台”,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。 特点: setup函数返回的对象中…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章:队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

C#与Sqlite数据库

1,一般的访问方式。 1.1,连接语句。 //sqlite 连接,支持相对位置,也支持绝对位置 Data Source../../Database/cater.db// 连接数据库,FailIfMissingfalse时若文件不存在会自动创建 string connStr "DataSourcetest.db;Vers…

Pr 视频效果:视频限制器

视频效果/颜色校正/视频限制器 Color Correction/Video Limiter 视频限制器 Video Limiter效果可用于确保视频信号符合广播和电视标准。它可以防止视频的亮度和色彩超出指定的范围,避免在播放时出现过曝、过暗或色彩失真等问题。 ◆ ◆ ◆ 效果选项说明 此效果也称…

Ubuntu配置FTP

Ubuntu配置FTP 切换root用户 sudo -i安装vsftpd软件包 apt update apt install vsftpd -y启动vsftp服务并设置自启动 systemctl start vsftpd systemctl enable vsftpd关闭防火墙 ufw disable ufw status创建FTP用户 useradd -m ftpuser passwd ftpuser设置用户的主目录为…

nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理

目录 1. 数据集处理 1.1 实现脚本 1.2 json文件 2. 设置读取路径 2.1 设置路径 2.2 数据集转换 2.3 数据集预处理 2.4 训练(3d_fullres) 3. 训练结果展示 关于nnUnet 数据集的处理和环境搭建,参考上文:第四章:nnUnet大模…