【力扣】重排链表

news/2024/8/26 17:39:17 标签: leetcode, 链表, 算法

一、题目描述

题目链接: . - 力扣(LeetCode)

二、解题思路

  1. 找到链表的中间节点,将链表分为两部分(可使用快慢双指针)
  2. 将后半部分链表逆序(双指针或头插法)
  3. 合并两个链表

一定要注意给分开之后的两个链表的末尾节点 .next 置为 null,否则会出错(超出时间限制)!

三、代码

class Solution {
    public void reorderList(ListNode head) {
        if(head == null || head.next == null || head.next.next == null) {
            return;
        }
        //1、找到链表的中间节点
        ListNode slow = head, fast = head;
        while(fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        //此时slow所指即为中间节点
        //将原始链表分为两个链表,要注意给分开之后的两个链表的末尾节点.next置为空
        //2、逆序slow之后的部分(双指针)
        ListNode prev = slow.next;
        slow.next = null;
        ListNode cur = prev.next;
        prev.next = null;
        while(cur != null) {
            ListNode next = cur.next;
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        //逆序之后,prev指向逆序后链表的首节点
        //3、合并两个链表
        ListNode cur1 = head, cur2 = prev;
        ListNode ret = new ListNode(0);
        ListNode ccur = ret;
        while(cur1 != null) {
            ccur.next = cur1;
            ccur = cur1;
            cur1 = cur1.next;
            if(cur2 != null) {
                ccur.next = cur2;
                ccur = cur2;
                cur2 = cur2.next;
            }
        }
    }
}


http://www.niftyadmin.cn/n/5558287.html

相关文章

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包,离线进行安装 ,用于软件封装。 测试下载一个gcc和依赖环境,关闭默认在线源,测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…

python项目读取oracle数据库方法(cx_Oracle库实现)

目录 创建一个python项目,并配置运行环境 查看oracle对应数据库版本(该标题下内容只是为了查看版本,不用在意) 从oracle官网下载对应版本的oracle客户端 解压下载的压缩包,并获取依赖 将依赖文件导入python项目运…

基于JAVA+SpringBoot+Vue+uniapp的微信小程序点餐平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 点餐小程序主要为小个…

持续集成06--Jenkins构建触发器

前言 在持续集成(CI)的实践中,构建触发器是自动化流程中不可或缺的一环。它决定了何时启动构建过程,从而确保代码变更能够及时地得到验证和反馈。Jenkins,作为业界领先的CI/CD工具,提供了多种构建触发器选项…

electron中app.whenReady()和app.on(‘ready‘)的区别

app.whenReady和app.on(‘ready’)都是用于在Electron应用程序中处理初始化完成事件的方法。app.whenReady是一个返回Promise的方法,它会在应用程序准备好创建窗口时解决。一旦app.whenReady被调用,就可以安全地创建窗口,因为此时Electron的初…

json.loads和json.dumps有什么区别,什么时候用json.loads,什么时候用json.dumps?

发现很多小伙伴对 json.loads() 和 json.dumps() 傻傻分不清,不知道什么时候应该用json.loads(),什么时候用 json.dumps(),这里简单给大家分享一下 json.loads() 和 json.dumps() 是 Python 标准库 json 模块中的两个重要函数,它们之间有…

【排序算法】1.冒泡排序-C语言实现

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直…

云备份服务端

文件使用工具和json序列化反序列化工具 //文件和json工具类的设计实现 #ifndef __UTIL__ #define __UTIL__ #include<iostream> #include<fstream> #include<string> #include <vector> #include<sys/stat.h> #include"bundle.h" #inc…