LeetCode[中等] 24.两两交换链表中的结点

news2024/12/27 3:32:49

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

 思路:递归

头结点head,第二个结点head.next, 交换结点之后,原第二个结点变成新链表的头结点,令newHead = head.next。递归思路为:

  1. 对 newHead.next 调用递归,将除了前两个结点以外的部分完成交换;
  2. head.next 指向递归调用之后的头结点;
  3. newHead.next 指向head。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode SwapPairs(ListNode head) {
        if(head == null || head.next == null)
            return head;

        ListNode newHead = head.next;
        head.next = SwapPairs(newHead.next);
        newHead.next = head;
        return newHead;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是链表的长度。需要对链表的每个结点进行更新指针的操作,每个结点的更新指针操作的时间都是 O(1)。

  • 空间复杂度:O(n),其中 n 是链表的长度。空间复杂度主要取决于递归调用栈的深度,递归调用栈最多不会超过 n 层。

思路:迭代

需要在头结点head之前新建一个哑结点dummyHead,为了交换 node1​ 和 node2​,需要依次进行以下操作:

  1. 将 temp.next 指向 node2​;

  2. 将 node1​.next 指向 node2​.next;

  3. 将 node2​.next 指向 node1​。

public class Solution {
    public ListNode SwapPairs(ListNode head) {
        ListNode dummyHead = new ListNode(0, head);
        ListNode temp = dummyHead;
        while (temp.next != null && temp.next.next != null) {
            ListNode node1 = temp.next;
            ListNode node2 = temp.next.next;
            temp.next = node2;
            node1.next = node2.next;
            node2.next = node1;
            temp = node1;
        }
        return dummyHead.next;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表中的每个结点一次,每个结点的反转操作的时间都是 O(1)。

  • 空间复杂度:O(1)。

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

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

相关文章

【论文阅读】MEDICAL GRAPH RAG: TOWARDS SAFE MEDICAL LARGE LANGUAGE MODEL VIA

论文地址:https://arxiv.org/abs/2408.04187#:~:textWe%20introduce%20a%20novel%20graph-based%20Retrieval-Augmented 代码地址: GitHub - MedicineToken/Medical-Graph-RAG: Medical Graph RAG: Graph RAG for the Medical Data 1 研究背景&#xff1…

LARA:多语言多轮对话意图分类的新突破

人工智能咨询培训老师叶梓 转载标明出处 多轮对话意图分类面临的主要挑战在于对话的复杂性和上下文的不断变化。如图 1 所示。在多轮对话中,意图可能随着对话的进展而变化,这就需要注释者不仅要理解每条消息的内容,还要把握整个对话的上下文…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

Android开发国家手机号归属地列表

Android开发国家手机号归属地列表 国家手机号归属地列表需求不多,但是还是有一些 一、思路: 本地的国家归属号json 二、效果图: 三、关键代码: // 联系:893151960 public class ChooseCountryActivity extends Ap…

golang 获取证书的生效及过期时间

测试样例 func TestGetCertVaildTime(t *testing.T) {certPEM, err : ioutil.ReadFile("aa.bbb.com.crt")if err ! nil {fmt.Println("读取证书文件出错:", err)return}// 解码PEM格式的证书block, _ : pem.Decode(certPEM)if block nil {fmt.Println(&q…

Deep Tone Mapping Operator for High DynamicRange Images

Abstract 计算快速的色调映射算子 (TMO) 可以快速适应各种高动态范围 (HDR) 内容,对于在电影屏幕或标准显示器等各种低动态范围 (LDR) 输出设备上进行可视化至关重要。 现有的 TMO 只能成功地对有限数量的 HDR 内容进行色调映射,并且需要进行广泛的参数…

Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)

一、Royal TSX软件下载地址 Royal Apps 二、Royal TSX 汉化 汉化包地址:GitCode - 全球开发者的开源社区,开源代码托管平台 三、基础配置 Royal TSX 是一款基于插件的应用,刚安装时还不具备使用条件,需要进行一些基础配置 1 安装基础插件…

银行CRM系统的核心功能解析与应用价值

在当今竞争激烈的金融市场中,银行业务的成功与否,越来越依赖于高效而精准的客户关系管理系统(CRM)。Zoho CRM系统不仅帮助银行提升服务质量、增强客户满意度,还能有效地促进业务发展和风险控制。为了帮助读者更好地理解…

蓝鹏螺纹钢测径仪的三大测量要点 纵肋 横肋 基圆

关键字:螺纹钢测径仪,螺纹钢纵肋测量,螺纹钢横肋测量,纵肋间隙测量,横肋间隙测量,螺纹钢基圆测量, 螺纹钢测径仪在测量螺纹钢时,主要关注纵肋、横肋和基圆这三大要点。以下是针对这三个方面的详细测量要点: 一、纵肋的测量要点 纵肋是螺纹钢表面上的凹陷…

Ktor快速上手1 - 第一个服务端项目

Ktor 快速上手 第一个APP 工程创建 首先你需要创建一个Ktor工程,这里有两种办法创建: 网页创建后下载包到本地,作为工程打开:Ktor: Project Generator直接在IDEA里面创建Ktor工程 为了方便操作,这里直接在IDEA里面…

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…

数学建模研赛总结

目录 前言进度问题四分析问题五分析数模论文经验分享总结 前言 本文为博主数学建模比赛第五天的内容记录&#xff0c;希望所写的一些内容能够对大家有所帮助&#xff0c;不足之处欢迎大家批评指正&#x1f91d;&#x1f91d;&#x1f91d; 进度 今天已经是最后一天了&#xf…

MySQL 慢查询日志:洞察性能瓶颈的利器

在 MySQL 数据库的管理和优化中&#xff0c;慢查询日志是一个非常有用的工具。它可以帮助我们找出执行时间较长的查询语句&#xff0c;从而针对性地进行优化&#xff0c;提高数据库的性能。那么&#xff0c;什么是 MySQL 的慢查询日志呢&#xff1f;又该如何配置和使用它呢&…

广西容县霞烟鸡,品牌兴农,助力乡村振兴!

在两广与港澳地区,流传着一句深入人心的饮食谚语——“无鸡不成宴”,它不仅是一种习俗的体现,更是对餐桌礼仪与待客之道的深刻诠释。每逢家宴欢聚、祭祖庆典或盛宴宾客,一只精心烹制的鸡总是不可或缺的主角,其缺席往往被视为对宾客的不敬。在这片美食文化的沃土上,广西容县的霞…

spark-sql建表数据同步到hive

1、基础环境 组件版本备注hadoop3.4.0官方下载hive3.1.3自编译sparkspark-3.5.3-bin-hadoop3官方下载&#xff0c;需要内置hive的jar相关内容paimon0.9.0Maven官方下载jdk1.8.0_41maven3.9.6固定版本 2、停止服务、清理日志 先停止&#xff0c;清理数据 sudo kill -9 $(ps -ef…

kafka 换盘重平衡副本 操作流程

一、起因 kakfa某块数据盘损坏&#xff0c;且数据无法恢复&#xff0c;需清空换新盘 二、梳理操作流程 查看topic信息 sh ./kafka-topics --bootstrap-server ***:9092 --list --exclude-internal 查看某个topic数据分布情况 sh ./kafka-topics --bootstrap-server ***:…

vscode+stfp插件,实现远程自动同步文件代码

概述 远程同步代码&#xff0c;将本地代码实时保存到同一局域网内的另一台电脑&#xff08;linux系统&#xff09;&#xff0c;这里的本地代码也可以是远程服务上的代码&#xff0c;即从一个远程ip同步到另一台远程ip服务器。 工具 vscode&#xff0c;SFTP插件 安装 vscod…

优可测白光干涉仪:激光陀螺仪提升良率与精度的关键

在当今科技日新月异的时代&#xff0c;高精度导航与定位技术已成为航空航天、军事防御、海洋勘探、自动驾驶乃至日常生活中不可或缺的一部分。而在这背后&#xff0c;激光陀螺仪作为核心元件之一&#xff0c;以其卓越的稳定性和极高的精度&#xff0c;正引领着导航技术的新一轮…

Java设计模式概述

设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…

python 自定义多线程的传参方式是什么

在 Python 中&#xff0c;threading 模块提供了多线程编程的支持&#xff0c;允许我们通过创建线程类的方式来实现并发操作。当我们自定义线程类时&#xff0c;可以通过修改类的构造方法和运行逻辑来传递和处理参数。 以下面这个实际的代码片段为例来说明&#xff1a; import…