冲击大厂算法面试=>链表专题【链表简单分割】

devtools/2024/9/22 19:15:25/

目录标题

  • 分隔链表【一分为二】
    • 上代码
    • 题解呀
    • 空间优化?
    • 实在不会的时候记住

分隔链表【一分为二】

在这里插入图片描述

感觉会又有点不会!!!😢
请添加图片描述

上代码

class Solution {/*** 一个链表的分区算法,该算法根据给定值 x 将链表分为两部分:一部分包含所有小于 x 的节点,另一部分包含所有大于等于 x 的节点。最终,这两部分链表被连接在一起返回*/public ListNode partition(ListNode head, int x) {//使用虚拟头结点:使边界条件更简单,避免在处理链表头节点时的额外检查//preHead:作为原始链表的头结点的前驱,便于操作原链表ListNode preHead = new ListNode(-1);preHead.next = head;//使用 cur 遍历原链表,从 head 开始直到链表末尾ListNode cur = preHead;//双链表构造:分别构造两个链表,最后再合并,避免了在原链表上直接修改带来的复杂性//leftPreNode 和 rightPreNode:分别用于构建小于 x 和大于等于 x 的新链表的头结点前驱ListNode leftPreNode = new ListNode(-10);ListNode leftNode = leftPreNode;ListNode rightPreNode = new ListNode(-10);ListNode rightNode = rightPreNode;while (cur.next != null) {//节点复制:为避免改变原链表,创建了新节点进行操作,虽然牺牲了一些空间效率,但简化了逻辑if (cur.next.val < x) {leftNode.next = new ListNode(cur.next.val);leftNode = leftNode.next;} else {rightNode.next = new ListNode(cur.next.val);rightNode = rightNode.next;}cur = cur.next;}//完成遍历后,将左侧链表的尾部指向右侧链表的头部(即 rightPreNode.next),形成完整的分区后的链表leftNode.next = rightPreNode.next;//将右侧链表的尾部指向 null,确保链表正确终止。rightNode.next = null;//head没变=1->4->3->2->5->2//返回左侧链表的头结点(即 leftPreNode.next),因为整个分区后的链表是以左侧链表开始return leftPreNode.next;}
}

题解呀

比较简单,就是把一个链表一分为二,然后再连接

请添加图片描述

在这里插入图片描述

空间优化?

直接将new ListNode(cur.next.val) 改成 cur.next 就行

while (cur.next != null) {if (cur.next.val < x) {leftNode.next = cur.next;leftNode = leftNode.next;} else {rightNode.next = cur.next;rightNode = rightNode.next;}cur = cur.next;
}

在这里插入图片描述

实在不会的时候记住

  • “小前”:把小于分区值的节点放在链表的前面(less链表)。
  • “大后”:把大于等于分区值的节点放在链表的后面(greater链表)。
  • “链条分开”:分别处理less链表和greater链表
  • “尾接中间”:将less链表的尾部连接到greater链表的头部。
  • “结尾‘无’配”:确保greater链表的尾部指向null,链表结束。
    请添加图片描述

有用的话就点个赞再走吧!

在这里插入图片描述


http://www.ppmy.cn/devtools/105836.html

相关文章

区块链通证系统功能分析

区块链通证系统功能分析涉及多个关键方面&#xff0c;以确保系统能够满足不同的业务需求和合规性要求。 同质与非同质通证&#xff1a;区块链通证系统需要支持同质通证&#xff08;如ERC-20&#xff09;和非同质通证&#xff08;如ERC-721&#xff09;&#xff0c;以适应不同类…

【高级编程】实用类详解(中)String类及其常用方法 含判断邮箱格式案例

文章目录 Stringint length()String equals()char charAt()String replace()其他常用方法判断邮箱格式案例 String String类位于java.lang包中&#xff0c;具有丰富的方法&#xff1a;计算字符串的长度、比较字符串、连接字符串、提取字符串… 使用String对象存储字符串 Str…

2.4 定时器与TIM中断

文章目录 时钟与时钟树stm32时钟树可以手动把系统时钟72mhz改成其他的吗&#xff1f;ST公司给的外围设备配置文件 的 默认配置说明 定时器什么是定时器定时器的类型影子寄存器 | 预装载寄存器&#xff08;Preload Register&#xff09;相关工程问题 通用定时器 相关框图定时中断…

搞了一年多的RAG,在业务上落地还是很有挑战

现在提到大模型落地&#xff0c;目之所及所有公司都在做RAG。RAG通过利用外部数据库来增强大模型&#xff0c;很大程度上解决了模型幻觉问题&#xff0c;以及知识更新和数据安全等问题。 如果在企业内落地大模型应用&#xff0c;还得从技术侧和业务侧共同入手。 技术层面上&a…

使用Spring Boot集成Redis缓存

在现代的Web应用中&#xff0c;缓存是提升性能和减少数据库压力的重要手段之一。而Redis作为一种高性能的分布式缓存存储&#xff0c;因其快速读写和支持多种数据结构的特点&#xff0c;广泛应用于各类项目中。 1. 准备工作 在正式开始集成Redis之前&#xff0c;需要确保Redi…

基于STM32的智能物料运载小车:OpenMV和OpenCV结合图像识别与运动控制算法优化(代码示例)

一、项目概述 智能物料运载小车项目旨在开发一款能够自主移动并进行物料搬运的智能设备。该小车通过多种传感器和智能控制算法&#xff0c;实现自动识别和搬运物料&#xff0c;提高物流效率&#xff0c;减少人工成本。项目的核心价值在于&#xff1a; 提高效率&#xff1a;通过…

基于vue框架的超市订单管理系统16uob(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;员工,商品分类,商品信息,供货商,入库订单,销售订单,货架信息,盈利信息 开题报告内容 基于Vue框架的超市订单管理系统开题报告 一、研究背景与意义 随着信息技术的飞速发展和电子商务的普及&#xff0c;传统超市管理模式正面临前所未有…