算法leetcode|86. 分隔链表(rust重拳出击)


文章目录

  • 86. 分隔链表:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


86. 分隔链表:

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

样例 1:

输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]

样例 2:

输入:head = [2,1], x = 2输出:[1,2]

提示:

  • 链表中节点的数目在范围 [0, 200] 内
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 直接模拟即可,题目没有特别说明对空间复杂度的要求,所以我们直接新建两个虚拟节点分别作为小于 x大于或等于 x 的链表头节点,分别对小于 x 的节点和大于或等于 x 的节点拉链表,遍历完毕后,将两个新建的链表结构再连接起来即可。
  • 新建两个节点是为了让代码结构简单,少一些判断逻辑,可以考虑一下如果不新建两个虚拟节点是否也可以完成,不过考虑考虑就好了,那样得不偿失。
  • rust处理链表相比其他语言要严肃一点,没那么自由,不过习惯就好了。

题解:

rust:

// Definition for singly-linked list.
// #[derive(PartialEq, Eq, Clone, Debug)]
// pub struct ListNode {
//   pub val: i32,
//   pub next: Option<Box<ListNode>>
// }
//
// impl ListNode {
//   #[inline]
//   fn new(val: i32) -> Self {
//     ListNode {
//       next: None,
//       val
//     }
//   }
// }
impl Solution {pub fn partition(mut head: Option<Box<ListNode>>, x: i32) -> Option<Box<ListNode>> {let (mut small_head, mut large_head) = (ListNode::new(0), ListNode::new(0));let (mut small, mut large) = (&mut small_head, &mut large_head);while let Some(mut node) = head {head = node.next.take();if node.val < x {small.next = Some(node);small = small.next.as_mut().unwrap();} else {large.next = Some(node);large = large.next.as_mut().unwrap();}}small.next = large_head.next;return small_head.next;}
}

go:

/*** Definition for singly-linked list.* type ListNode struct {*     Val int*     Next *ListNode* }*/
func partition(head *ListNode, x int) *ListNode {smallHead, largeHead := &ListNode{}, &ListNode{}small, large := smallHead, largeHeadfor head != nil {if head.Val < x {small.Next = headsmall = small.Next} else {large.Next = headlarge = large.Next}head = head.Next}large.Next = nilsmall.Next = largeHead.Nextreturn smallHead.Next
}

c++:

/*** 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 *smallHead = new ListNode(0);ListNode *small = smallHead;ListNode *largeHead = new ListNode(0);ListNode *large = largeHead;while (head != nullptr) {if (head->val < x) {small->next = head;small = small->next;} else {large->next = head;large = large->next;}head = head->next;}large->next = nullptr;small->next = largeHead->next;return smallHead->next;}
};

python:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:small_head, large_head = ListNode(0), ListNode(0)small, large = small_head, large_headwhile head:if head.val < x:small.next = headsmall = small.nextelse:large.next = headlarge = large.nexthead = head.nextlarge.next = Nonesmall.next = large_head.nextreturn small_head.next

java:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode partition(ListNode head, int x) {ListNode smallHead = new ListNode(0);ListNode small     = smallHead;ListNode largeHead = new ListNode(0);ListNode large     = largeHead;while (head != null) {if (head.val < x) {small.next = head;small = small.next;} else {large.next = head;large = large.next;}head = head.next;}large.next = null;small.next = largeHead.next;return smallHead.next;}
}

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis-plus 使用 mybatis-plus-join 增强多表关联查询能力

一、mybatis-plus-join mybatis-plus 原生的能力不支持多表关联&#xff0c;对于这种场景只能通过写SQL进行实现&#xff0c;而mybatis-plus-join 则是建立在 mybatis-plus 基础之上的扩展框架&#xff0c;可以在不影响原有能力之上通过简单的API即可实现多表关联能力而无需编…

OpenCV 画极线

from pylab import * import cv2from backend._gs_ import stereo_cameradef compute_epipole(F):""" 从基础矩阵 F 中计算右极点(可以使用 F.T 获得左极点)"""# 返回 F 的零空间(Fx0)U,S,V np.linalg.svd(F)e V[-1]return e/e[2]def plot_epi…

故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障…

RK3588编译MXNet框架

目录 1. 背景 2.编译MXNet准备 3.开发板编译 1. 背景 MXNet&#xff08;也称为Apache MXNet或incubator-mxnet&#xff09;是一个开源的深度学习框架&#xff0c;它最初由华为和亚马逊AWS共同开发&#xff0c;并于2017年成为Apache软件基金会的孵化项目。MXNet旨在提供高效、…

【ArcGIS】CSV表导入Arcgis时字段类型改变

一个小记录&#xff1a; 可以看见我的文件夹里不知道我怎么操作的&#xff0c;多出了一个【ini】结尾的文件。 里面显示&#xff0c;我的文件里对应的几列限定为text 这也是为什么我进行xy表转point操作时无法进行的原因 不管我怎么在 csv操作&#xff0c;修改列的单元格格式都…

oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,

通过kettle采集数据时&#xff0c;表输入的组件&#xff0c;查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改…

数据结构学习笔记——链式表示中的双链表及循环单/双链表

一、双链表 &#xff08;一&#xff09;双链表的定义 双链表是在单链表结点上增添了一个指针域prior&#xff0c;指针域prior指向当前结点的前驱结点&#xff0c;即此时链表的每个结点中都有两个指针域prior和next&#xff0c;从而可以很容易通过后继结点找到前驱结点&#x…

视阅口译有何特点,哪里提供视阅口译翻译?

据了解&#xff0c;视阅口译是一种涉及视听和口头表达的翻译方式&#xff0c;它在跨文化交流等领域中起到了非常重要的作用。那么&#xff0c;视阅口译有何特点&#xff0c;哪里提供专业的视阅口译服务&#xff1f; 我们知道&#xff0c;视阅口译就是基于事先准备好的讲稿或文…

【HMS Core】机器学习服务热门问题合集

【关键词】 机器学习服务、文本识别、身份证识别 【问题描述1】 机器学习服务的文本识别能力&#xff0c;是否支持草书等&#xff1f; 【解决方案】 草书是不支持的&#xff0c;目前建议使用较为规范的字体测试。 【问题描述2】 机器学习服务是否支持训练模型&#xff1f;…

Docker 运行swagger-editor实现在线接口文档维护与调试

文章目录 一、序二&#xff0c; Docker部署准备1. 编辑docker-compose.yml2. 新增启动、停止脚本3. 样例 swagger.yaml 三&#xff0c; 启动swagger-editor1. 使用说明2. 完整代码备份 一、序 因工作需要&#xff0c;需要搭建python运行环境&#xff0c;项目中python基于flask…

spark

spark Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍&#xff0c;甚至能够将应用在磁盘上的运行速度提升10倍。除了Map和Reduce操作之外&#xff0c;Spark还支持SQL查询&#xff0c;流数据&#xff0c;机器学习和图表数据处理。开发者可以在一个数据管道用例中单独…

华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段

近年来&#xff0c;数字化转型成为证券业发展的下一战略高地&#xff0c;根据 2021 年证券业协会专项调查结果显示&#xff0c;71% 的券商将数字化转型列为公司战略任务。 在落地数字化转型战略过程中&#xff0c;证券业核心交易系统面临着不少挑战。构建新一代分布式核心交易…

SpringMVC Day 06 : 转发视图

前言 在SpringMVC框架中&#xff0c;视图解析器可以将逻辑视图名称转换为实际的视图对象。除了直接渲染视图&#xff0c;你还可以通过SpringMVC提供的转发和重定向机制来跳转到另一个视图。在本篇博客中&#xff0c;我们将学习SpringMVC中的转发视图技术&#xff0c;以及如何使…

Android 10适配外部存储方案

Android Api 29 对文件和文件夹进行了重大更改。不允许使用外部存储&#xff0c;如下方法&#xff1a; Environment.getExternalStorageDirectory() /mnt/sdcard Environment.getExternalStoragePublicDirectory(“test”) /mnt/sdcard/test 只能使用内部存储 getExterna…

抖音小店怎么做?五步教你做好抖店,新手快来看!

我是电商珠珠 新手在做抖音小店的时候&#xff0c;往往在入驻完成之后&#xff0c;就不知道后续应该怎么操作了。 我将抖店的运营分为了五个步骤&#xff0c;可以供大家参考。 一、类目 开店之前选择好的类目&#xff0c;后续如果想要更改的话可以随时更改。 不过需要下架…

python函数的定义与调用

python定义函数和函数的使用 函数 函数是对程序逻辑进行结构化或过程化的一种编程方法&#xff0c;将整块代码巧妙地隔离成易于管理的小块。把重复代码放到函数中而不是进行大量的拷贝&#xff0c;这样既能节省空间&#xff0c;也有助于保持一致性&#xff1b;通常函数都是用…

metaRTC集成flutter ui demo编译指南

概要 Flutter是由Google开发的开源UI工具包&#xff0c;用于构建跨平台应用程序&#xff0c;支持linux/windows/mac/android/ios等操作系统。 metaRTC新增flutter demo&#xff0c;支持linux/windows/mac/android/ios操作系统&#xff0c;此demo在ubuntu桌面环境下测试成功。…

【文献分享】基于线特征的激光雷达和相机外参自动标定

论文题目&#xff1a;Line-based Automatic Extrinsic Calibration of LiDAR and Camera 中文题目&#xff1a;基于线特征的激光雷达和相机外参自动标定 作者&#xff1a;Xinyu Zhang, Shifan Zhu, Shichun Guo, Jun Li, and Huaping Liu 作者机构&#xff1a;清华大学汽车安…

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…

Unity 多图片(带透明通道)合成

取个巧&#xff0c;利用Camera和Render Texture 多个2d图片组合成型 每个Square都单独设置一个层级 相机设置 RenderTexture设置&#xff0c;然后将RenderTexture放在一个RawImage上 以下是生成图片的代码 using UnityEngine.UI; using System.Collections; using System.…