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

news2025/1/15 17:20:12

文章目录

  • 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, largeHead

	for head != nil {
		if head.Val < x {
			small.Next = head
			small = small.Next
		} else {
			large.Next = head
			large = large.Next
		}
		head = head.Next
	}

	large.Next = nil
	small.Next = largeHead.Next

	return 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_head
        while head:
            if head.val < x:
                small.next = head
                small = small.next
            else:
                large.next = head
                large = large.next
            head = head.next
        large.next = None
        small.next = large_head.next
        return 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.coloradmin.cn/o/1149275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能工厂解决方案

智能工厂解决方案&#xff1a;生产工单 智能工厂解决方案&#xff1a;物流中转 样品单-4.2寸 工单任务卡-4.2寸 工单流转卡-4.2寸 生产配送卡-4.2寸 工序参数卡-7.5寸 生产拣配单-7.5寸 仓库24代-参数 接收路由器发送的数据信息并解析&#xff0c;做出相应的指示&#…

低压系统防雷保护综合应用方案

低压系统的防雷保护是指保护低压电源系统和电气设备免受雷击和电涌电压造成的损坏的技术措施。它包括直击雷保护、侵入波保护、等电位连接和防雷接地等方面。它在通信、光伏、电动汽车等行业都有广泛的应用。 地凯科技低压系统防雷保护是指保护低压电源系统和电气设备免受雷击…

idea断点模式下,获得对象的值(JSON格式)

打开IDEA里面自带的计算器使用json将你需要的对象输出到Result框

【C++入门篇】保姆级教程篇【中】

目录 零、面向对象的由来 一、结构体与类 二、类和对象 1&#xff09;面向过程和面向对象&#xff1a; 2&#xff09;类的声明与定义 3&#xff09;类的访问限定符 三、this指针 1&#xff09;this指针的概念 2&#xff09;this指针的特性 四、类的默认成员函数 1&#xff…

一文详解汽车电子LIN总线

0.摘要 汽车电子LIN总线不同于CAN总线。 LIN总线基本上是CAN总线的廉价补充&#xff0c;相比于CAN总线&#xff0c;它提供较低的可靠性和性能。同时LIN总线也是一个应用非常广泛的网络协议&#xff0c;并且越来越受欢迎。 再一次&#xff0c;我们准备了一个关于LIN总线的简要…

Mybatis—基础操作

mybatis入门后&#xff0c;继续学习mybatis基础操作。 目录 Mybatis基础操作准备工作删除操作日志输入预编译SQLSQL注入参数占位符 新增操作基本新增添加后返回主键 更新操作查询操作根据id查询数据封装条件查询条件查询 Mybatis基础操作 准备工作 根据下面页面原型及需求&am…

相邻节点迭代器

图论中最常见的操作就是遍历邻边&#xff0c;通过一个顶点遍历相关的邻边。邻接矩阵的遍历邻边的时间复杂度为 O(V)&#xff0c;邻接表可以直接找到&#xff0c;效率更高。 邻接矩阵迭代: ... public Iterable<Integer> adj(int v) {assert v > 0 && v < …

消息认证码--数字签名--证书

6. 消息认证码—>保证数据的完整性 "消息认证码 --- 消息被正确传送了吗?"6.1 什么是消息认证码 Alice 和 Bob 的故事 像以前一样&#xff0c;我们还是从一个Alice和Bob的故事开始讲起。不过&#xff0c;这一次Alice和Bob分别是两家银行&#xff0c;Alice银行通…

智慧公厕:提升城市卫生与舒适体验的未来之选

智慧公厕作为城市管理的一项重要创新&#xff0c;已经在环境监测调控、厕位监测引导、自动化清洁、自动灯光控制、远程控制等方面展现出先进而完善的功能。它不仅提升了市民对公共厕所卫生、舒适、安全等方面的使用体验&#xff0c;同时也为城市管理带来了颇具引领性的改革和升…

为什么MySQL没有负载,但交易却跑不动?

在MySQL的数据库中&#xff0c;我们有时会发现MySQL数据库明明没有负载&#xff0c;CPU、硬盘、内存和网络等资源都很空闲&#xff0c;但很多SQL都pending在哪儿&#xff0c;MySQL数据库无法处理交易。这是怎么回事呢&#xff1f; 在数据库系统中出现这种情况通常是锁竞争造成…

C#,数值计算——Globals的计算方法与源程序

1 文本格式 using System; using System.Text; namespace Legalsoft.Truffer { public static partial class Globals { //const int FLT_RADIX 2; //const int DBL_MANT_DIG 53; //const int INT_DIGITS 32; //const float FLT_…

精密空调监控方法,让你一次全学会!

随着科技的迅猛发展&#xff0c;越来越多的领域和行业对温度和湿度等环境参数的高度控制需求日益增长。无论在哪里&#xff0c;对精密空调的依赖都在不断增加。 然而&#xff0c;要确保这些系统的高效运行和监测已经变得愈发复杂。为了解决这些挑战&#xff0c;精密空调监控系统…

【java学习—十】TreeSet集合(5)

文章目录 1. TreeSet1.1. 自然排序1.2. 定制排序 1. TreeSet TreeSet 是 SortedSet 接口的实现类&#xff0c; TreeSet 可以确保集合元素处于排序状态。     TreeSet 支持两种排序方法&#xff1a;自然排序和定制排序。默认情况下&#xff0c; TreeSet 采用自然排序。 1.1.…

java项目之学校招生信息网(ssm)

项目简介 学校招生信息网实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、学生管理&#xff0c;党员风采管理&#xff0c;校园之家管理&#xff0c;师资队伍管理&#xff0c;院系简介管理&#xff0c;专业简介管理&#xff0c;录取信息管理、学生录取管理、系统管理…

【ChatGPT瀑布到水母】AI 在驱动软件研发的革新与实践

这里写目录标题 前言内容简介作者简介专家推荐读者对象目录直播预告 前言 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术&#xff0c;也在不…

Egg.js 中 Controller 的使用

如果需要了解Controller &#xff0c;就得知道什么是mvc。 MVC概述 什么是mvc&#xff0c;这个概念&#xff0c;我相信绝大部分人肯定是了解的。MVC是模型&#xff08;model&#xff09;- 视图&#xff08;view&#xff09;- 控制器&#xff08;controller&#xff09;的缩写…

git跳过用户名密码验证,以及配置credential-helper

平时我们在使用git命令时&#xff0c;如果使用http方式拉取代码每次都需要使用填写用户名和密码&#xff0c;非常的麻烦。 如何才能绕过每次繁琐的填充? 如果想要绕过git的交互方式&#xff0c;首先需要了解git的密码存储机制。 git使用的使用是一种名叫**[credential helpe…

ssm搭建后404的错误

spring、mybatis 的配置文件一般不会出错&#xff08;注解扫描路径要涵盖 controller层&#xff09;&#xff0c;controller 层 url 一般也不会写错&#xff0c;出现404&#xff0c;更容易忽略的是 文件路径位置。 首先是 idea 提示 servlet-mapping 找不到 , 我这里显然是有的…

Java-PriorityQueue 优先队列(结构与用法)

1. 数据结构 1.1 2.Java使用 2.1 核心要点 PriorityQueue是一个无限制的队列&#xff0c;并且动态增长。默认情况下&#xff0c;优先级队列的对象按自然顺序排序。PriorityQueue 不是线程安全的。多线程情况下可以使用PriorityBlockingQueue。 2.2 构造函数 PriorityQueu…

如何去掉Word文档中蓝色和红色波浪线

在Word2013文档中有些文字或者字母的下面会出现一些红色或蓝色的波浪线&#xff0c;这是因为Word会自动检查文档中拼写和语法错误所造成的&#xff0c;那么如何去掉这些蓝色红色的波浪线呢&#xff1f;下面就跟大家分享一下方法。 工具/原料 Word2013 方法/步骤 1 首先打开一个…