大厂面试-美团高频考察算法之重排链表

本文学习目标或巩固的知识点

  • 学习如何处理链表重排类题目
    • 巩固反转链表
    • 巩固快慢指针
    • 巩固合并链表

提前说明:算法题目来自力扣、牛客等等途径

🟢表示简单
🟡表示中等
🔴表示困难
🤮表示恶心

博主真实经历,该题在美团到店,美团地图部门一面均有考察!!!!!!一般大厂面试的做题时间也就10-30分钟左右,如果不经常练习或者没掌握技巧很容易栽倒到一些容易的题上面,等回头看只有空悲切!!!!掌握技巧和算法敏感度很重要!!!!!

LCR 026. 重排链表🟡

给定一个单链表 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]

通过题目可知

  1. 链表合并后链表的头节点不变,不用考虑链表头结点问题
  2. 链表重排后规律是第一个结点跟倒数第一个结点、第二个结点跟倒数第二个结点,依次
    1. 可分成两个链表然后合并,然后考虑如何合并?考察基础:合并两个链表
    2. 第二个链表怎么分出来?快慢指针
    3. 倒数第一个结点、倒数第二个结点依次等如何处理?反转链表
    4. 返回头节点head即可
  3. 不能改变节点值,必须真是的交换结点

题解

通过分析分部分处理,首先实现反转链表、寻找链表中间节点,然后切分链表,合并链表。

合并链表的过程如何不理解的一定要自己画图。https://www.processon.com/

链表类的题目画图最容易理解,不然容易绕晕!!!!

本题考察的链表的知识点挺多的,特别好的一道题目。

class Solution {
    public void reorderList(ListNode head) {
        ListNode mid = findMiddle(head);
        //表示第二段链表
        ListNode midNext = mid.next;
        //切断链表
        mid.next = null;

        //分成两段链表
        ListNode firstHead = head;
        ListNode secondHead = reverse(midNext);

        //合并两段链表
        while(secondHead != null){
            ListNode next1 = firstHead.next;
            ListNode next2 = secondHead.next;

            firstHead.next = secondHead;
            secondHead.next = next1;

            firstHead = next1;
            secondHead = next2;
        }
    }

    // 寻找链表中间节点
    private ListNode findMiddle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head.next;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

    //反转链表
    public ListNode reverse(ListNode head){
        ListNode pre = null;
        ListNode cur = head;
        while(cur != null){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

结果验证

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pikachu靶场-File Inclusion

介绍: File Inclusion(文件包含漏洞)概述 文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了&…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮,分别选择职业1和职业2,create脚本中对应的函数。 2.调取inputfield中所输入的角色名(限制用户名长度为7字符),但愿逆向的服务器可以查重名: 3.点击头衔,显示选择的职业&a…

二手货wordpress企业网站主题模板

二手车wordpress主题模板 简洁的二手车wordpress主题模板,适合做二手车业务的公司官方网站使用。 https://www.jianzhanpress.com/?p3473 wordpress二手物资回收主题 绿色wordpress二手物资回收主题,用于二手物资回收公司WP建站使用。 https://www.…

算法【查找算法的概念】

查找算法概念 1、查找的基本概念2、评价查找算法3、问题: 查找过程中我们要研究什么? 1、查找的基本概念 查找的概念: 根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或者记录。 查找算法也可以叫搜索算法。查找算法就是从一个有序…

HTMLElement.click()的回调触发踩坑

先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…

深度学习基础——U-Net图像分割

图像分割,就是根据图像的某种相似性特征(如亮度、颜色、纹理、面积、形状、位置、局部统计特征或频谱特征等)将医学图像划分为若干个互不相交的“连通”区域。 相关特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的…

yolov8-seg dnn调用

接上篇一直更换torch、opencv版本都无法解决这个问题(seg调用dnn报错)。那问题会不会出在yolov8源码本身呢。yolov8的讨论区基本都看过了,我决定尝试在其前身yolov5的讨论区上找找我不信没人遇到这个问题。很快找到下面的讨论第一个帖子&…

八、线性代数二 ,矩阵的秩

目录 1、矩阵子式的定义与子式个数的计算: 2、矩阵秩的定义: 3、矩阵秩的计算方法: 4、矩阵秩的 性质: 线性代数四——几个重要的矩阵点积_线性代数 矩阵点积-CSDN博客 1、矩阵子式的定义与子式个数的计算: 概念&…

RocketMQ高性能核心原理与源码架构剖析

RocketMQ高性能核心原理与源码架构剖析 读、写队列 采用读写分离的方式,RocketMQ在创建Topic的时候会单独设置读队列和写队列,写队列负责写入以及同步数据到读队列,读队列会记录消费者的offset,负责消息拉取,通过Mes…

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 ,进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 ,这些细节很重要…

openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议

文章目录 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 目前LLVM在数据库内核侧已默认打开,用户可结合上述的分析进行配置,总体建议如下: 设置合理的wor…

谷歌seo推广有什么方式?

首先是网站优化,这是所有SEO工作的基础,这不仅仅意味着关键词的优化,还包括提升网站的加载速度、确保良好的移动设备适配性、以及加强网站的安全性,一个技术性能优异的网站,能够为用户提供更佳的体验,从而受…

【IDEA】安装Jrebel实现热部署

前言 devtool虽然也可以实现热部署 但是新增完方法和修改完参数后 热部署不生效 需要重启 而Jrebel却不用 功能也比devtool强大 但是收费 这里教大家怎么使用 插件下载 激活Jrebel

通俗易懂地理解稀疏性

今天我想与大家探讨的是一个数学和工程学中的重要概念——稀疏性。这个概念可能听起来很抽象,但它实际上贯穿于我们生活中的许多方面。那么,稀疏性到底是什么呢?简单来说,在数学和信号处理领域,一个信号被称为稀疏&…

2024年最值得尝试的创业项目,利用信息差,普通人下班也能做

大家好,我是电商花花。 到了2024年,人们依然在寻找长期可靠的副业项目,但我建议暂时停一下,因为抖音小店这个轻松暴利的副业项目还在等着我们呢。 抖音小店无货源创业项目作为一个轻资产创业项目,操作简单&#xff0…

基于springboot+vue的信息化在线教学平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

018—pandas 生成笛卡尔积排列组合合并多列字符串数据

思路: 本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下(示例): import pandas as pd2.读入数据 代码如下&…

每日一学—由面试题“Redis 是否为单线程”引发的思考

文章目录 📋 前言🌰 举个例子🎯 什么是 Redis(知识点补充)🎯 Redis 中的多线程🎯 I/O 多线程🎯 Redis 中的多进程📝 结论🎯书籍推荐🔥参与方式 &a…

【Ubuntu】解决Ubuntu 22.04开机显示器颜色(高对比度/反色)异常的问题

使用Ubuntu 22.04时强制关机了一下(make -j16把电脑搞崩了),开机后系统显示的颜色异常,类似高对比度或反色,如下图。看着很难受,字体也没办法辨认。还好之前遇到过类似的问题,应该是一个配置文件…

政府采购网有哪些回款方式

政府采购网的回款方式多种多样,具体取决于采购项目的性质、规模以及采购单位与供应商之间的约定。以下是一些常见的政府采购网回款方式: 线上支付:随着电子商务的发展,越来越多的政府采购项目采用线上支付方式。这种方式方便快捷&…