文章目录

  • 题目描述
  • 思路 & 代码
    • 更新版:快慢指针 + 翻转链表

题目描述

  • 一看题目反序:用栈
  • 更新:O(1) 空间复杂度

思路 & 代码

  • 先快慢指针,找到需要入栈的起点,然后逐个入栈
  • 然后逐个出栈,进行重排即可
  • 注意1:记得对重排后的链表结尾进行 Last.next = null 处理,防止成环
  • 注意2:奇偶情况要进行处理,可见代码注释
  • 时间复杂度 O(n) ,空间复杂度 O(n)
/*** 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) {// 快慢指针ListNode now = head;// 走到需要进行入栈的位置now = head;ListNode pre = head;while(now.next != null && now.next.next != null){pre = pre.next;now = now.next.next;}// 偶数处理if(now.next != null){pre = pre.next;}now = pre.next;// 末尾处理,防止死循环pre.next = null;// 入栈Stack<ListNode> myStack = new Stack<>();while(now != null){myStack.push(now);now = now.next;}// 重排now = head;while(!myStack.isEmpty()){ListNode temp = myStack.pop();ListNode nextLoop = now.next;temp.next = now.next;now.next = temp;now = nextLoop;}}
}

更新版:快慢指针 + 翻转链表

class Solution {public void reorderList(ListNode head) {// 0. 特殊情况if(head == null || head.next == null) {return;}// 1. 快慢指针,划分出两段(注意第一段结尾的 next 置空,用 slowPreListNode slow = head, fast = head;ListNode slowPre = null;while(fast != null && fast.next != null) {slowPre = slow;slow = slow.next;fast = fast.next.next;}// 奇数,slow 为中间节点(奇偶情况处理)if(fast != null) {slowPre = slow;slow = slow.next;}// 2. 第二段的翻转slowPre.next = null;ListNode pre = null;while(slow != null) {ListNode nextNode = slow.next;slow.next = pre;pre = slow;slow = nextNode;}// 3. 合并两段链表fast = head;while(pre != null) {ListNode temp1 = fast.next;ListNode temp2 = pre.next;fast.next = pre;pre.next = temp1;fast = temp1;pre = temp2;}}
}

【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)相关推荐

  1. 【LeetCode笔记】234. 回文链表(Java、快慢指针、链表)

    文章目录 题目描述 思路 & 算法 题目描述 写这道题前最好把206.翻转链表 写了 有空间复杂度的话都好说,不管是新建链表.还是用字符串equals都好做. 思路 & 算法 快慢指针 ...

  2. [Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]

    [问题描述][中等] [解答思路] 141 每次遍历到一个节点时,判断该节点此前是否被访问过. 具体地,我们可以使用哈希表来存储所有已经访问过的节点.每次我们到达一个节点,如果该节点已经存在于哈希表中 ...

  3. day07 Java链表(环、快慢指针)

    转载注明!!https://blog.csdn.net/qq_31842777/article/details/90632307 涉及以下问题: 查找倒数第k个结点: 查找中间结点: 判断链表是否有环 ...

  4. 链表的中间节点--快慢指针

    问题来源:链表的中间节点 问题描述:给定一个带有头结点 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点. 例子: 输入:[1,2,3,4,5] 输出:此列表中的结 ...

  5. 【链表】判断链表是否有环-快慢指针

    目录 一.思想 二.代码 三.运行结果 一.思想 什么叫有环? 一个结点有两个指向的时候就会产生环.例如在一个单链表0-9的数据中,3的下个节点为4,让3的下个结点同时指向9,此时就会在3的位置产生两 ...

  6. 【链表习题集1】整体和局部反转链表同频和快慢指针合并链表

    前言: 刷题和面试兼顾还得看你啊-牛客网 近几年互联网受疫情影响,许多互联网都使用牛客网在线笔试招人 很多同学因为不熟悉牛客网的环境和使用,最后在线笔试面试中屡屡受挫 牛客网提供了语言巩固,算法提高等 ...

  7. 【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)

    文章目录 题目描述 代码 && 思路 二刷 题目描述 打卡第三天!加油加油- 数据结构笔试题貌似也会考= =,不过考法不一样,有点规律. 总的来说还是挺有意思的,我们直接来看代码吧- ...

  8. 【LeetCode笔记】225. 用队列实现栈(Java、队列、栈)

    题目描述 感觉栈实现队列更简单,不过这个也还好 写法有点像 JVM GC 里的复制算法 思路 & 代码 两个队列实现栈:from.to from:实际上的栈,存储元素就是按照栈的顺序来,负责p ...

  9. LeetCode 876. 链表的中间结点(快慢指针)

    1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 2. 解题 快慢指针法 class Solution {public:List ...

  10. 【LeetCode笔记】287. 寻找重复数(Java、快慢指针、原地、链表)

    文章目录 题目描述 思路 & 代码 更新 题目描述 可以理解成数组版本的 环形链表 II 更多详细思路可见以上超链接. 思路 & 代码 如何转化成逻辑上的链表? nums[i] 是 第 ...

最新文章

  1. 树、森林与二叉树的相互转换
  2. 【控制】《多无人机协同控制技术》周伟老师-第8章-危险状态下的无人机编队运动控制策略
  3. 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结
  4. 十问十答 GPL 许可证
  5. Eclips将lib打入war中
  6. Python编程技巧合集
  7. 从零开始写项目第八篇【将未完成的项目发布在Tomcat上】
  8. 北京大学生物信息学学习(6)隐含马尔可夫模型
  9. virtualenv -- python虚拟沙盒
  10. 如何通过nrpe设置Windows 内存检测
  11. 工厂5S管理的内容和标准
  12. 共享计算机后无法访问磁盘,win7局域网怎么共享整个硬盘,如D盘E盘F盘等等-win7怎么共享磁盘,win7共享后无权限访问...
  13. (FPGA)verilog驱动RGB接口TFT液晶屏
  14. 【PyG】简介 - 图神经网络
  15. django 改端口_django更改默认的runserver端口
  16. 【网络】华为网络设备认证登录设置
  17. 洛谷P5072 [YNOI2015]盼君勿忘 莫队+unordered_set+毒瘤卡常
  18. 有道词典_每日一句_2019/09
  19. data单复数一样吗_[学英语] data后面跟is还是are?
  20. UE4灰度图生成地图记录blender生成城市地形

热门文章

  1. java--自动装箱,拆箱
  2. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)
  3. ansible执行mysql命令,Ansible常用命令(ad-hoc 命令)
  4. MFC创建模式对话框与非模式对话框
  5. Python数据类型-元组类型
  6. 图像变换dpi(tif->jpg),直方图均衡化,腐蚀膨胀,分水岭,模板匹配,直线检测
  7. Axis2;wsdl生成客户端和serverJava代码
  8. android 文本倒影,android案例---图片处理倒影效果
  9. 使用Python实现简易的数据标注工具
  10. 软件工程 Beta 阶段 团队贡献分数