Leetcode 86. 分隔链表

题目链接:

86. 分隔链表 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/partition-list/description/


题目:

给你一个链表的头节点 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


思路:

实现读题,题目要求我们将链表节点val值小于目标值x的节点放在第一个大于或等于x值的节点前。(一开始做这题我看成了将val值小于x的节点放在大于该val值前,害的我WA了好几次,所以说要好好读题)

那么我们可以设置两种头节点(big_head和small_head)分别用于存储val值大于等于x的节点和val值小于x的节点。再设置一个指针now指向head节点,表示当前指向的节点;一个指针small指向val值小于x的链表尾部(small_head);一个指针big指向val大于等于x的链表尾部(big_head)。

接着循环遍历每个节点即可,让val值大于等于x的节点接在big后,然后让big指向big的下一个节点;让val值小于x的节点接在small后,然后让small指向small的下一个节点即可。

最后,让small的next指向big_head的下一个节点(即重新连接两个链表变成一个链表),返回指针small_head的next指向的地址即可。


AC代码:

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) {if (head == nullptr || head->next == nullptr) {return head;}ListNode* big_head = new ListNode(0);ListNode* small_head = new ListNode(0);ListNode* big = big_head;ListNode* small = small_head;ListNode* now = head;while (now != nullptr) {if (now->val < x) {small->next = now;small = small->next;}else {big->next = now;big = big->next;}now = now->next;}small->next = big_head->next;big->next = nullptr;return small_head->next;}
};


如果我的文章对你有所帮助,不妨给我个关注何点赞吧。

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

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

相关文章

Rumble Club上线时间+配置要求+游戏价格+加速器推荐

Rumble Club上线时间配置要求游戏价格加速器推荐 Rumble Club是一款基于物理的玩家大乱斗游戏&#xff0c;该作拥有丰富饱满的视觉效果和趣味性十足的游玩极致&#xff0c;让玩家可以各种富有想象力的方式&#xff0c;推搡、戏耍好友。该作即将正式上线&#xff0c;为了避免玩…

500道Python毕业设计题目推荐,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

TQZC706开发板教程:编译zynq linux内核2019_R1

您需要下载对应版本的Linux系统文件以及IMG1.3.1镜像文件。为了方便您的操作&#xff0c;本文所使用的所有文件以及最终生成的文件&#xff0c;我都已经整理并放置在本文末尾提供的网盘链接中。您可以直接通过该链接进行下载&#xff0c;无需在其他地方单独搜索和获取。希望这能…

Python安装和开发环境搭建

Python的下载 访问Python语言官网(Welcome to Python.org)进行下载相关安装包&#xff0c;根据需要和系统环境、下载相应的windows/linux/macOs安装包。 ​ 更新的还是挺快的&#xff0c;都到3.12.3了。 直接点Download哪里的Python 3.12.3。 ​ 我这边系统是64位&#xf…

龙迅LT8618SXB TTL /BT656/BT601/BT1120桥接到HDMI 1.4,低功耗HDMI1.4发射机

龙迅LT8618SXB描述&#xff1a; LT8618SX是Lontium基于ClearEdgeTM技术的低功耗版本HDMI发射机。它支持24位颜色深度HDMI1.4&#xff08;高清多媒体接口&#xff09;规范。它们完全向后兼容Lontium的第一代HDMI发射机LT8618EX。LT8618SX是一款高性能、低功耗的部件&#xff0c…

30 消息队列

原理 操作系统可以通过页表映射在共享区创建一块共享内存&#xff0c;也可以申请一个队列。A进程和B进程可以向这个队列发送数据块&#xff0c;两个进程接收数据块来通信 函数 申请数据块 参数中的key来自于ftok函数 删除消息队列 同样消息队列也有数据结构管理&#xff…

MATLAB——M文件

M文件 MATLAB允许编写两种程序文件- 脚本−脚本文件是扩展名为.m的程序文件。在这些文件中&#xff0c;您编写了一系列要一起执行的命令。脚本不接受输入&#xff0c;也不返回任何输出。它们对工作区中的数据进行操作。 函数−函数文件也是扩展名为.m的程序文件。函数可以接…

(回溯)记忆化搜索和dp

动态规划的核心就是 状态的定义和状态的转移 灵神 的 回溯改递归思路 首先很多动态规划问题都可以采用 回溯 的思想 回溯主要思想就是把 一个大问题分解成小问题 比如 采用子集类回溯问题中的核心思想-> 选或不选 或者 选哪个 记忆化搜索之后 我们可以发现 每个新节点依…

java多线程-创建

简介 定义&#xff1a;多条执行流程并行的技术优点&#xff1a;异步执行&#xff0c;避免同步等待 创建-继承Thread 代码实现 继承Thread类重写run方法新建自建线程的实例调用start方法 继承Thread类重写run方法 /*** 1. 继承Thread类* 2. 重写run方法*/ public class MyThrea…

代码随想录第43天|1049.最后一块石头的重量II 494. 目标和

1049.最后一块石头的重量II 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049.最后一块石头的重量II_哔哩哔哩_bilibili 有…

rCore-Turorial-Book第三课(计算机启动流程和程序内存布局与编译流程探索)

本节任务&#xff1a;梳理程序在操作系统中被编译运行的全流程&#xff0c;大体了解我们在没有操作系统的情况下&#xff0c;我们会面对那些困难 重点 1. 计算机组成基础 面对的困难&#xff1a;没有操作系统&#xff0c;我们必须直面硬件资源&#xff0c;管理起他们并为应用程…

PLSQL数据库

目录 什么是PLSQL数据库 PL数据库的实现方法 PL数据库的基本语法 1.作用 2.语法 3.赋值输出 4.引用 5.异常处理 6.if 判断 7.loop循环 8.while循环 9.for循环 10.游标 11.参数游标 12.索引 13.分区表 什么是PLSQL数据库 PL/SQL&#xff08;Procedure Language/…