当前位置: 首页 > news >正文

LeetCode热题100--24. 两两交换链表中的节点--中等

1. 题目

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

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

2. 题解

/*** 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) {if(head == null || head.next == null){return head;}ListNode next = head.next;head.next = swapPairs(next.next);next.next = head;return next;}
}

3. 解释

出自这位老师:画手大鹏

  1. public ListNode swapPairs(ListNode head) 是方法声明,表示这个名为swapPairs的方法接受一个参数,即链表的头节点。该方法返回一个ListNode类型的值。

  2. if(head == null || head.next == null){ return head; } 如果链表为空或只有一个节点,那么直接返回这个单独的节点作为结果(因为没有需要交换的元素)。

  3. ListNode next = head.next; 获取第二个节点。

  4. head.next = swapPairs(next.next); 递归调用函数来处理下一对,并将结果链接到当前头部。这样做是为了保持列表的顺序(因为我们正在交换每一对)。

  5. next.next = head; 将第一个节点设置为第二个节点的后继节点。这行代码实际上是完成了两个节点的交换。

  6. return next; 返回新的头部,即刚刚交换的那个节点。

  7. 这段代码的时间复杂度是O(n),空间复杂度是O(1),其中n是链表中的节点数量。因为我们只使用了一个常数量的额外变量,不管输入的大小如何,所花费的时间和空间都是恒定的。

http://www.dtcms.com/a/294383.html

相关文章:

  • Linux文件——Ext2文件系统(3)_软硬链接
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • #Linux内存管理# 详细介绍madvise函数的工作原理
  • Elasticsearch(ES)安装
  • 分布式电商系统:缓存策略、负载均衡与容灾方案
  • 解决 Electron 中 window.open 打开新窗口的各种“坑”
  • Python 程序设计讲义(6):Python 的基本用法——运算符与表达式
  • API 汇总:ONLYOFFICE 文档最近更新
  • 背包DP之0/1背包
  • 11-1 浅层神经网络及计算前向传播
  • 局部重要性注意力LIA,通过区域重要性图与门控机制实现高阶信息交互,自适应增强有用特征、抑制冗余信息,平衡模型性能与效率。
  • VR-Doh: 革新3D建模的虚拟现实体验
  • DPVR亮相青岛品牌日,崂山科创力量引领AI眼镜新浪潮
  • 基于PLC的轨检小车控制器设计
  • .NET-键控服务依赖注入
  • 【实战】Dify从0到100进阶--文档解读(13)API前端再开发
  • 苍穹外卖DAY11
  • 【LeetCode数据结构】栈和队列的应用——设计循环队列问题详解
  • 【后端】FastAPI的Pydantic 模型
  • Excel 将数据导入到SQLServer数据库
  • Java TCP 通信详解:从基础到实战,彻底掌握面向连接的网络编程
  • 通用表格识别技术的应用,深刻改变人们处理表格数据的方式
  • 如何最简单、通俗地理解Python的numpy库?
  • Ubuntu22.04.5 LTS安装与使用Docker
  • 【优选算法-多源 BFS】多源 BFS:解决多个起点的广度优先搜索
  • AI语境下创新教学模式应用示范与推广联盟成立| 南开大学携手和鲸,破解智能化时代教育难题
  • 只能在栈上创建对象
  • Linux网络-------1.socket编程基础---(UDP-socket)
  • 广州邮科万兆6光千兆48电工业级光纤交换机:三层功能如何重新定义网络智能化
  • Vue Scoped样式:当动态元素成为“无家可归“的孤儿