leetcode143. 重排链表(java)

news2025/6/22 0:08:24

重排链表

  • leetcode143. 重排链表
    • 题目要描述
  • 解题思路
  • 代码
  • 链表专题

leetcode143. 重排链表

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reorder-list

题目要描述

给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

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

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

提示:
链表的长度范围为 [1, 5 * 1000]
1 <= node.val <= 1000

解题思路

先找到链表中间节点.
然后把剩下的一半的节点加到Stack 队列.根据先进后出的原理,
会先弹出最后节点.
然后和前面的节点进行指针重连.

代码

/**
 * 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 void reorderList(ListNode head) {
        if(head == null || head.next == null){
            return;
        }
        ListNode Lmid = getMid(head);
        //中间节点的后半段链表拿到
        ListNode rMid = Lmid.next;
        //指针指向null
        Lmid.next = null;
        Stack<ListNode> stack = getStack(rMid);
        ListNode cur = head;
         ListNode next = null;
        while(!stack.isEmpty()){
            ListNode last = stack.pop();
            next = cur.next;
            cur.next = last;
            last.next = next;
            cur = next;
        }
        
    }
	/**
	* 获取链表的中间节点,偶数长度返回中间上节点
	*/
    public ListNode getMid(ListNode head){
        ListNode slow = head;
        ListNode fast = head;
        while(fast.next != null && fast.next.next != null){
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
 	/**
 	* 把链表的后半段 加进队列中
 	*/
    public Stack<ListNode> getStack(ListNode slow){
        Stack<ListNode> stack = new Stack<>();
        while(slow != null){
            stack.push(slow);
            slow = slow.next;
        }
        return stack;
    }
}

链表专题

leetcode109. 有序链表转换二叉搜索树

leetcode61. 旋转链表

leetcode24. 两两交换链表中的节点

删除排序链表中的重复元素

递归实现翻转链表

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

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

相关文章

根据字节、华为、阿里、腾讯等大厂整理的2023最新面试热点问题,还不行我也救不了你了~

大厂面试热点问题 1、测试人员需要何时参加需求分析&#xff1f; 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的开展越有利 可以尽早的确定测试思路 减少与开发人员的交互 减少对需求理解上的偏差 2、软件测试与调试的关系 测…

MM32F3273G8P火龙果开发板MindSDK开发教程11 -获取msa311加速器的xyz轴数据

MM32F3273G8P火龙果开发板MindSDK开发教程11 -获取msa311加速器的xyz轴数据 1、msa311简介 使用i2c总线 可以读取xyz轴的加速度 可以监测单击双击事件 可以监测运动与静止状态 可以监测自由落体事件&#xff0c;可用来监测摔倒或跌落。 可以监测旋转事件&#xff0c;类似手机…

工作中自我或者团队管理的几个有用工具

个人或者团队管理过程中&#xff0c;采用一些有效的管理工具或者方法&#xff0c;可以提升工作效率和结果。它们包括SMART原则、PDCA循环、SWOT分析、5W2H分析、鱼骨图分析、七个凡是。这几个工具或者方法之间有互通性&#xff0c;比如&#xff0c;PDCA循环中&#xff0c;在P这…

数学建模预备知识(1)全网最全的数学建模竞赛汇总,别再被坑了!

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;Qq及各类联系方式在图片上&#xff01; 喜欢的朋友可以关注下&#xff0c;下次更新不迷路&…

【MySQL】为什么MySQL选择B+Tree来做索引?

B树和B树的区别? B树 B树 B*树 B树和B树的区别 &#xff08;1&#xff09;存储量大&#xff1a;B树叶子及非叶子节点存索引数据&#xff0c;B树叶子非叶子节点存索引&#xff0c;叶子节点存数据&#xff1b; &#xff08;2&#xff09;查找速度&#xff1a; 查单个值&…

细说websocket - php篇

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分&#xff0c;这个部分在 node 中可以十分轻松的完成&#xff0c;因为 node 提供的 net 模块已经对 socket 套接字做了封装处理&#xff0c;开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

运营-22.内容分发

内容分发 内容分发本质要解决的问题包含两点&#xff1a; 1. 高效的连接人与信息&#xff1b; 2. 过滤出有价值的信息&#xff0c;让合适的人看到合适的信息 。 常见的内容分发方式&#xff1a; 1. 编辑分发&#xff1b; 2. 订阅分发&#xff1b; 3. 社交分发&#xff1b; 4. 算…

Oracle中使用【Interval】对【日期】进行【相加减】,报错 ORA-01839:指定月份的日期无效(Interval的坑)

文章目录 1. 前言2. 先说结论3. 案例演示 1. 前言 最近在对某些表进行旧数据的删除&#xff0c;必然是通过【时间】删除之前较为久远的数据&#xff0c;比如1年前&#xff0c;6个月前&#xff0c;7天前的数据等等情况&#xff0c;这个时候的SQL&#xff0c;必然会出现条件&…

pandas---数据结构(Series、DataFrame 和 MultiIndex)创建方式、属性

1. 数据结构 Pandas中一共有三种数据结构&#xff0c;分别为&#xff1a;Series、DataFrame 和MultiIndex。 其中Series是一维数据结构&#xff0c;DataFrame是二维表格型数据结构&#xff0c;MultiIndex是三维数据结构。 1.1 Series Series是一个类似于一维数组的数据结构…

【LeetCode】每日一题 -- 1170. 比较字符串最小字母出现频次 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/compare-strings-by-frequency-of-the-smallest-character/ 1. 题解&#xff08;1170. 比较字符串最小字母出现频次&#xff09; 昨天的每日一题 2699. 修改图中的边权 有点难&#xff0c;研究了一会儿&#xff0c;学习了一…

文件讲解—【C语言】

目录 1.为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 4.1 顺序读写函数介绍 4.2 对比一组函数 例子 例子 5.3 rewind 例子 6. 文本文件和二进制文件 测试代…

机器学习 day15(神经网络的工作原理,激活值a的公式)

1. 隐藏层的内部实现 如图通常来说&#xff0c;该模型一共有两层&#xff0c;不包括输入层&#xff08;layer 0&#xff09;&#xff0c;第一层是隐藏层&#xff08;layer 1&#xff09;&#xff0c;第二层是输出层&#xff08;layer 2&#xff09;&#xff0c;我们可以用方括…

【力扣刷题 | 第三天】242.有效字母异位词 349 两个数组的交集

目录 1.242. 有效的字母异位词 2.349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 使用算法笔记&#xff1a; 总结&#xff1a; 1.242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意…

学习记录 -- Accurate and fast cell marker gene identification with COSG

文章目录 brief代码演示安装实操 个人感受 brief 单细胞数据分析当中&#xff0c;细胞聚类分群完成之后&#xff0c;我们希望得知每一个细胞类群是什么细胞&#xff0c;也就是细胞类型注释。 通常情况下&#xff0c;我们可以找到细胞类群间表达量存在差异的基因&#xff0c;我…

爆款视频生成器-视频批量剪辑系统源码开发分享

创建视频 该接口用于创建抖音视频&#xff08;支持话题, 小程序等功能&#xff09;。该接口适用于抖音。 使用限制 抖音的 OAuth API 以https://open.douyin.com/ 开头。挂载小程序请先完成注册开发者平台账号。创建抖音视频后, 会有一个审核过程, 期间只有自己可见。如果发…

【C/C++】带你快速掌握 使用—增强for(范围for循环)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Cefsharp-Winform114.2.100(5735)最新版本体验

版本说明: 官方仓库最新版本体验,114.2.100 (分支5735),支持MP3,WEBGL,不支持H264 视频体验H264参阅109版本(CSDN中搜索) Cefsharp109.1.110(winfrom)最新支持H264-MP3-MP4功能体验,导出pdf和下载方法有变调整_cef h264_久爱物联网的博客-CSDN博客 效果预览: 一…

LinuxC编程——高级文件操作

目录 一、查询文件信息1、stat2、stat fstat lstat区别 二、目录操作2.1 opendir2.2 readdir2.3 closedir例练习&#xff1a;实现ls操作 三、库3.1 库的定义3.2 库的分类3.2.1 静态库3.2.2 动态库 3.3 创建库3.3.1 静态库制作3.3.2 动态库制作 一、查询文件信息 1、stat int …

TLD7002学习笔记(二)-使用S32K144驱动TLD7002

文章目录 1. 前言2. 评估板简介3. 官方驱动3.1 官网驱动的介绍3.2 官方驱动的移植3.3 官方驱动的使用 4. 参考资料 1. 前言 本篇文章是TLD7002学习笔记的第二篇&#xff0c;主要是介绍如何使用S32K144驱动TLD7002-16ES。为此&#xff0c;笔者做了一套基于TLD7002-16ES的评估板…

重学Java的第一章

1.写在前面 今年的行情很差&#xff0c;差到很多人都没有办法找到工作&#xff0c;博主也是一个菜逼&#xff0c;找了一家小破公司&#xff0c;导致我那段时间很迷茫&#xff0c;也是也很焦虑&#xff0c;思考了很多&#xff0c;觉得我自己学的已经够多了&#xff0c;但是每一…