【面试经典 150 | 链表】分隔链表

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 解题思路
    • 方法一:模拟
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【链表】【模拟】


题目来源

86. 分隔链表


解题思路

方法一:模拟

我们只需要维护两个链表 smalllarge 即可,前者用来按顺序存储所有小于 x 的节点,后者用来按顺序存储所有大于等于 x 的节点。

为了实现上述思路,我们分别定义了两个链表的两个指针,small 链表的头结点 sH、尾节点 sTlarge 链表的头结点 eAndgH、尾节点 eAndgT

从原链表的头结点 head 开始遍历,直至结束,记当前遍历的节点为 cur

  • 首先记录当前节点的下一个节点 next
  • 将当前的节点 cur 指向空节点;
  • 接着将 cur 的值与 x 进行比较:
    • 如果小于 x,则更新到 small 节点中,主要如果此时的 sH 为空,需要利用氮当前节点初始化 sH,否则直接将 cur 加在 sH 后面并更新 sT = cur
    • 类似的对于 cur->val >= x 的情况,也有类似操作
  • 最后更新 cur = next

最后,遍历完毕原链表后,将两段链表拼接起来。

返回答案时,如果 sT == nullptr,说明 small 链表为空,直接返回 large 链表的头结点 eAndgH 即可;否则返回 small 链表的头结点。

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* sH = nullptr, * sT = nullptr;
        ListNode* eAndgH = nullptr, * eAndgT = nullptr;
        ListNode* next = nullptr;
        
        while(head != nullptr) {    // 使用 head 作为当前的节点
            next = head->next;
            head->next = nullptr;

            if(head->val < x) {
                if(sH == nullptr) {
                    sH = head;
                    sT = head;
                }else {
                    sT->next = head;
                    sT = head;
                }
            }
            else {
                if(eAndgH == nullptr) {
                    eAndgH = head;
                    eAndgT = head;
                }else {
                    eAndgT->next = head;
                    eAndgT = head;
                }
            }
            head = next;
        }

        // 重新链接
        if(sT != nullptr) {
            sT->next = eAndgH;
        }
        return sT == nullptr ? eAndgH : sH;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为原链表的长度。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

关于macOS 10.13-10.15系统安装教程

关于macOS 10.13-10.15系统安装教程 1、关机状态按完电源键&#xff0c;或重启黑屏后&#xff0c;按住option键不放&#xff0c;直到进入启动菜单&#xff1b; 2、选择启动U盘&#xff0c;开始跑进度条&#xff0c;跑完后进入如下界面&#xff1a; 安装界面语言选择&#xff0c…

Github 2024-04-18 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-18统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Vue项目1TypeScript项目1Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个…

数据库主从备份

1、简介 数据库运⾏时&#xff0c;⼀些因素可能会导致服务运⾏不正常&#xff0c;⽤户访问数据受阻。对于互联⽹公 司&#xff0c;尤其是购物⽹站⽽⾔&#xff0c;这种情况造成的损失是⽆法估量的。因此&#xff0c;对数据库进⾏“备份” 也是必不可少的操作。当主要的数据库死…

HX711压力传感器学习一(STM32)

目录 原理图&#xff1a;​ 引脚介绍&#xff1a; HX711介绍工作原理: 程序讲解&#xff1a; 整套工程&#xff1a; 发送的代码工程&#xff0c;与博客的不一致&#xff0c;如果编译有报错请按照报错和博客进行修改 原理图&#xff1a; 引脚介绍&#xff1a; VCC和GND引…

数字孪生模型降价技术

前言&#xff1a; 数字经济是继农业经济、工业经济之后&#xff0c;随着信息技术革命发展而产生的一种新的经济形态&#xff0c;大力发展数字经济已经成为国家实施大数据战略、主推经济高质量发展的重要抓手&#xff0c;而数字孪生则是助力数字经济与实体经济融合发展的一种重…

局域网MongoDB的数据库访问不了

局域网MongoDB的数据库访问不了 确认bindIp: 0.0.0.0后&#xff0c;仍然是访问不了&#xff0c;查询资料发现是windows自带防火墙的问题 进入到 允许其他应用&#xff0c;选择mongod.exe的位置 这样就好了。

CSS 01

CSS层叠样式表 HTML的局限性 HTML只关注内容的语义&#xff0c;可以做简单的样式&#xff0c;却带来了无限的臃肿和繁琐。 CSS CSS是层叠样式表的简称&#xff0c;也被称之为CSS样式表或级联样式表。CSS也是一种标记语言。   CSS主要用于设置HTML页面中的文本内容(字体、大…

基于SpringBoot框架的“智慧食堂”

采用技术 基于SpringBoot框架的“智慧食堂”系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能 系统首页 用户注册页面 菜品信息页面 个人…

【R语言】混合图:小提琴图+箱线图

{ggstatsplot} 是 {ggplot2} 包的扩展&#xff0c;用于创建图形&#xff0c;其中包含信息丰富的绘图本身中包含的统计测试的详细信息。在典型的探索性数据分析工作流程中&#xff0c;数据可视化和统计建模是两个不同的阶段&#xff1a;可视化通知建模&#xff0c;而建模又可以建…

嵌入式学习56-ARM5(linux驱动启动程序)

知识零碎&#xff1a; bootm&#xff1a; 启动内核同时给内核传参 …

电能质量检测仪

TH-6500随着电力系统的快速发展和智能化水平的提高&#xff0c;电能质量问题越来越受到人们的关注。电能质量检测仪作为一种关键设备&#xff0c;能够实时监测电能质量&#xff0c;为电力系统的稳定运行提供有力保障。 一、电能质量检测仪概述 电能质量检测仪是一种用于监测和…

怎样将excel的科学计数法设置为指数形式?

对了&#xff0c;这个问题中所谓的“指数形式”是指数学上书写的右上标的指数格式&#xff0c;能不能通过单元格设置来做这个格式的转换呢&#xff1f; 一、几个尝试 以下&#xff0c;以数字123000为例来说明。 情况1.转换成数学上的书写方式&#xff0c;如下图的样子&#x…

象棋教学辅助软件介绍

背景 各大象棋软件厂商都有丰富的题目提供训练&#xff0c;但是其AI辅助要么太弱&#xff0c;要么要付费解锁&#xff0c;非常不适合我们这些没有赞助的业余棋手自行训练&#xff0c;于是我需要对其进行视觉识别&#xff0c;和AI训练&#xff0c;通过开启这个辅助软件&#xf…

Linux安装和使用Android Debug Bridge(ADB)

目录 1、开发环境和工具 2、ADB是什么&#xff1f; 3、安装ADB 3.1、使用包管理器安装 ADB 3.2、手动安装 ADB 4、使用ADB 4.1、连接设备 4.2、执行shell命令 4.3、安装应用程序 4.4、截取屏幕截图 4.5、模拟按键和手势 4.6、上传文件到Android设备 4.7、从Android设备下载文件…

Chrome修改主题颜色

注意&#xff1a;自定义Chrome按钮只在搜索引擎为Google的时候出现。

2024年五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

Civil3D 2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Civil3D软件是一款专为土木工程设计与文档编制而打造的建筑信息模型&#xff08;BIM&#xff09;解决方案。它结合了AutoCAD的熟悉环境&#xff0c;并进行了专业定制&#xff0c;以满足土木工程道路与土石方解决的需求。Civil3D能…

HTML5漫画风格个人介绍源码

源码介绍 HTML5漫画风格个人介绍源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果截图 源码下载 HTML5漫画风格…

Java设计模式——代理模式

静态代理&#xff1a; Java静态代理是设计模式中的一种&#xff0c;它通过创建一个代理类来代替原始类&#xff0c;从而提供额外的功能或控制原始类的访问。 如何使用Java静态代理 要创建一个静态代理&#xff0c;你需要有一个接口&#xff0c;一个实现该接口的目标类&#…

固定测斜仪:工程观测的精密利器

在工程观测测量领域&#xff0c;固定测斜仪扮演着至关重要的角色。固定测斜仪&#xff0c;凭借其耐冲击型倾斜传感器、出色的可靠性、快速稳定的特点&#xff0c;以及简洁的安装和智能识别功能&#xff0c;已成为行业内重要工具。其输出信号为RS485数字量&#xff0c;可直接显示…