我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java关于重排链表详细解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java关于重排链表详细解析

1.题目

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

 L0→ L1 → … → Ln-1 → Ln  请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 来源:力扣(LeetCode)

2.解析

将一个链表分为两个子链表,然后将其归并。

我们要先找到链表的中间节点,在中间节点将其断开

然后反转后半链表

再将两个子链表逐个连起来

 将后半链表反转,独立成一个子链表。

最后将两个子链表的节点逐个连接就OK了

3.代码


class Solution {
    public void reorderList(ListNode head) {
        
        ListNode fast = head;
        ListNode slow = head;
        //找中间节点
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        //截断链表
        ListNode cur = slow.next;
        slow.next = null;
        //反转后半链表
        ListNode node = null;
        while (cur != null) {
            ListNode curNext = cur.next;
            cur.next = node;
            node = cur;
            cur = curNext;
        }
        //合并
        ListNode prev = head;
        ListNode l1 = node;
        while (l1 != null) {
            ListNode next1 = prev.next;
            ListNode next2 = l1.next;
            prev.next = l1;
            l1.next = next1;
            prev = next1;
            l1 = next2;
        }
        
 
    }
}

到此这篇关于Java关于重排链表详细解析的文章就介绍到这了,更多相关Java 重排链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java关于重排链表详细解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

STL list链表的用法详细解析

这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL
2022-11-15

java中关于散列表的详细介绍

什么是散列表散列表,也叫作哈希表(Hash Table),是一种提供键(Key)和值(Value)的映射关系的数据结构,只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近于O(1)。在线学习视频推荐:java视频散列表的工作原理散列表在本
java中关于散列表的详细介绍
2014-10-05

关于系统特征的详细解析

  下面就是我为大家准备的文章,是关于存储系统特点的解析,下面就开始阅读文章吧!存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器
关于系统特征的详细解析
2024-04-17

关于java中的Lambda表达式的详细介绍

什么是lambda表达式?lambda表达式是一个可传递的代码块,可以在后面执行一次或多次。推荐java相关视频教程:java学习视频例如:class action implements ActionListener{@Overridepublic void
关于java中的Lambda表达式的详细介绍
2016-04-10

关于JAVA中方法的重写详细讲解又与重载有何区别

1、什么是方法重写(overriding)? (1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写
2018-09-29

关于JAVA中多线程编程方法的详细解析(附实例)

一、程序、进程、线程程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码。它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文件。  从狭义来说,进程是正在运行的程序的实例;从广义上来说,进程
关于JAVA中多线程编程方法的详细解析(附实例)
2019-09-06

关于java中堆内存与栈内存的详细分析

一、概述在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。二、堆内存1、什么是堆内存?堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。2、堆
关于java中堆内存与栈内存的详细分析
2017-04-01

关于JAVA异常类结构的详细讲解(附实例)

1、异常类大致结构2.Throwable是所有异常类的超类.3.当程序可能出现错误(异常)的时候应该使用,使用关键捕获异常进行处理.4.捕获异常结构如下:public void test() { int num1 = 10; int num2 =
关于JAVA异常类结构的详细讲解(附实例)
2017-04-28

关于Java中finalize析构方法的作用详解

构造方法用于创建和初始化类对象,也就是说,构造方法负责”生出“一个类对象,并可以在对象出生时进行必要的操作,在这篇文章中会给大家简单介绍一下析构方法,需要的朋友可以参考下
2023-05-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录