当前位置: 首页 > news >正文

【数据结构OJ题】链表分割

原题链接:https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

2. 思路分析

整体思路:创建两个链表,分别存放小于x的结点大于等于x的结点分别进行尾插

这道题目使用哨兵位会更简单,原因如下(能避开很多为空的情况):

(1)使用哨兵位就不需要考虑两个链表尾插时为空的情况。

(2)两个链表链接时也不需要考虑是否为空的情况。

(3)哪怕有一个链表为空,也有哨兵位的头结点,正常链接即可。

我们用结构体指针lheadltail分别表示值小于x的那一条链表,用结构体指针gheadgtail表示值大于等于x的那一条链表。

用malloc()函数分别申请两个结点,也就是两个链表的哨兵位,让lhead和ltail一开始指向其中一个,ghead和gtail一开始指向另一个。

再创建一个结构体指针cur用来遍历原链表,我们采用了while循环,当cur不为空时遍历结点。

结点的值小于x时,我们将这个结点尾插到第一个链表(ltail->next=cur)。再让ltai往后走一步(ltai=ltail->next)。

结点的值大于等于x时,我们将结点尾插到第二个链表(gtail->next=cur)。再让gtail往后走一 一步(gtail=gtail->next)。

尾插一个结点后让cur往后走一步cur=cur->next)。当cur为空时停止循环

然后将两个链表链接起来。(ltail->next=ghead->next)。

有一点需要非常注意!!!

将gtail->next=NULL

否则可能会出现环。

因为现在lhead指向的是哨兵位,所以我们要将lhead往后走一步lhead=lhead->next)。

因为怕找不到lhead的下一个位置,所以我们引入一个结构体指针head保存lhead的下一个位置。(struct ListNode *head=lhead->next)。

然后为了防止内存泄漏,我们要用free()释放掉两个哨兵位(即free(lhed)free(ghead))。

最后返回head即可

3. 代码实现

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode *lhead,*ltail,*ghead,*gtail;lhead=ltail=(struct ListNode*)malloc(sizeof(struct ListNode));ghead=gtail=(struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode *cur=pHead;while(cur){if(cur->val<x){ltail->next=cur;ltail=ltail->next;}else{gtail->next=cur;gtail=gtail->next;}cur=cur->next;}ltail->next=ghead->next;//不空,可能导致出现环gtail->next=NULL;struct ListNode *head=lhead->next;free(lhead);free(ghead);return head;}
};

相关文章:

【数据结构OJ题】链表分割

原题链接&#xff1a;https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId8&&tqId11004&rp2&ru/activity/oj&qru/ta/cracking-the-coding-interview/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2…...

无感知发布

什么是无感知发布 "无感知发布"是指在软件系统或应用程序进行更新或升级时&#xff0c;尽可能地避免对用户或系统的正常运行产生影响或中断。这种发布方式通常采用一系列技术和策略&#xff0c;以确保新版本的软件可以平滑地替代旧版本&#xff0c;而不会造成用户的…...

C++ 虚继承

C棱形继承 在 C 中&#xff0c;在使用 多继承 时&#xff0c;如果发生了如果类 A 派生出类 B 和类 C&#xff0c;类 D 继承自类 B 和类 C&#xff0c;这时候就发生了菱形继承。 如果发生了菱形继承&#xff0c;这个时候类 A 中的 成员变量 和 成员函数 继承到类 D 中变成了两…...

git commit用法

git commit 是 Git 版本控制系统中的一个命令&#xff0c;用于将更改提交到本地存储库。以下是 git commit 的一些常见用法和选项&#xff1a; 基本用法: git commit -m "提交信息"使用 -m 选项可以直接在命令行中添加提交信息。 提交所有更改: git commit -a -m &q…...

【LeetCode】543.二叉树的直径

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5]…...

TypeScript教程(五)条件语句,循环,函数

一、条件语句 条件语句基于不同的条件来执行不同的动作 1.if语句&#xff1a;只有当指定条件为true时&#xff0c;使用该语句来执行代码 2.if...else语句&#xff1a;当条件为true时执行代码&#xff0c;当条件为else时执行其他代码 3.if...else if...else语句&#xff1a;…...

vue使用jsplumb 流程图

安装jsPlumb库&#xff1a;在Vue项目中使用npm或yarn安装jsPlumb库。 npm install jsplumb 创建一个Vue组件&#xff1a;创建一个Vue组件来容纳jsPlumb的功能和呈现。 <template><div style"margin: 20px"><div style"margin: 20px">&l…...

【BASH】回顾与知识点梳理(二十八)

【BASH】回顾与知识点梳理 二十八 二十八. 例行性工作排程(crontab)28.1 什么是例行性工作排程Linux 工作排程的种类&#xff1a; at, cronCentOS Linux 系统上常见的例行性工作 28.2 仅执行一次的工作排程atd 的启动at 的运作方式实际运作单一工作排程at 工作的管理batch&…...

LangChain源码逐行解密之系统(二)

LangChain源码逐行解密之系统 20.2 serapi.py源码逐行剖析 我们可以看一下Google查询的例子,在LangChain中有多种实现的方式。 如图20-5所示,在utilities的serpapi.py代码文件中实现了SerpAPIWrapper。 图20- 5 utilities的serpapi.py的SerpAPIWrapper 在langchain目录的se…...

QT的设计器介绍

设计器介绍 Qt制作 UI 界面&#xff0c;一般可以通过UI制作工具QtDesigner和纯代码编写两种方式来实现。纯代码实现暂时在这里不阐述了在后续布局章节详细说明&#xff0c;QtDesigner已经继承到开发环境中&#xff0c;在工程中直接双击ui文件就可以直接在QtDesigner设计器中打…...

[LitCTF 2023]Ping

因为直接ping会有弹窗。这里在火狐f12,然后f1选禁用javascript,然后ping 然后输入127.0.0.1;cat /flag 得到flag&#xff0c; 查看其他大佬的wp &#xff0c;这里还可以抓包。但是不知道为什么我这里的burp 用不了...

Spring Cloud面试突击班1

Spring Cloud面试突击班1 1.Spring Cloud 中有哪些组件&#xff0c;整个项目架构中我们的重点又有哪些&#xff1f; Spring Cloud 是一套基于Spring Boot的微服务解决方案。 Spring Cloud生态在国内主流的分为两套&#xff0c;一套是以奈飞开源的Spring Cloud Netfilx 20%&a…...

线上售楼vr全景看房成为企业数字化营销工具

在房地产业中&#xff0c;VR全景拍摄为买家提供了虚拟看房的全新体验。买家可以通过相关设备&#xff0c;远程参观各个楼盘的样板间和实景&#xff0c;感受房屋的空间布局和环境氛围&#xff0c;极大地提高了购房决策的准确性。对于房地产开发商和中介机构来说&#xff0c;VR全…...

“深入探索JVM内部机制:解密Java虚拟机原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解密Java虚拟机原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;揭示其工作原理和关键组成部分&#xff0c;包括类加载、内存管理、垃圾回收、即时编译和运行时数据区域等。…...

最长 上升子序列

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...

Nginx的介绍

本资料转载于传智教育-解锁你的IT职业薪未来&#xff0c;仅用于学习和讨论&#xff0c;如有侵权请联系 视频地址&#xff1a;04-Nginx的优点_哔哩哔哩_bilibili 资源文档&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1RlFl92FdxRUqc858JSxPSQ 提取码&#xff1a;12…...

[杂项]奥特曼系列影视列表大全

1966年&#xff1a;《奥特曼》「初代奥特曼」 1967年&#xff1a;《奥特赛文》 1971年&#xff1a;《归来的奥特曼》「杰克奥特曼」 1972年&#xff1a;《艾斯奥特曼》 1973年&#xff1a;《泰罗奥特曼》 1974年&#xff1a;《雷欧奥特曼》 1979年动画版&#xff1a;《乔尼亚斯…...

java代码日记--java 基础语法

java代码日记 在线运行 本地运行环境配置 Java 实例 实战 java8 Java 基础语法 一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。 下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&…...

Spring中的IOC与DI-细胞内物质与传递

对IOC的认识 Spring Inversion of Control简称Spring IOC&#xff0c;是一种设计原则&#xff0c;通过它可以实现对象之间的解耦。通过Spring DI(Dependency Injection)依赖注入实现对象生命周期管理&#xff0c;为开发者提供对象创建、使用方式。 Spring中的Bean 在Spring框…...

【探索Linux】—— 强大的命令行工具 P.5(yum工具、git 命令行提交代码)

阅读导航 前言一、软件包管理器 yum1.yum的概念yum的基本指令使用例子 二、git 命令行提交代码总结温馨提示 前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也学习了一些Linux的基本操作&#xff0c;也了…...

机器学习_03_线性回归

线性回归一、概念与定位类型&#xff1a;监督学习、回归任务定义&#xff1a;用于建模【特征 X】与【连续标签 y】之间的【线性关系】核心思想&#xff1a;找一条直线&#xff08;或超平面&#xff09;&#xff0c;让预测值 ŷ 与真实值 y 的【误差最小】二、模型形式一元线性回…...

从LED闪烁到任务调度:手把手教你用英飞凌AURIX的STM系统定时器构建简单时间片

从LED闪烁到任务调度&#xff1a;基于英飞凌AURIX的STM系统定时器构建轻量级时间片框架 在嵌入式开发中&#xff0c;系统定时器&#xff08;STM&#xff09;常被简化为"高级延时工具"&#xff0c;但它的潜力远不止于此。当开发者面对需要同时处理LED状态控制、按键扫…...

OPPO新时代板凳精神:解码长期主义研发体系与前沿技术人才战略

1. 从“板凳精神”到“微笑前行”&#xff1a;OPPO的研发哲学与人才战略最近&#xff0c;OPPO在五四青年节发布的那支名为《板凳》的品牌片&#xff0c;以及随之公布的超过2000人的技术研发招聘计划&#xff0c;在科技圈里引发了不小的讨论。很多人乍一看&#xff0c;觉得这又是…...

3分钟完成Honey Select 2中文汉化:免费增强补丁终极使用指南

3分钟完成Honey Select 2中文汉化&#xff1a;免费增强补丁终极使用指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的界面语言障碍而…...

AI 系统多模型路由与降级架构设计:从流量调度到无感切换的工程实践

背景 / 现象 在一个典型的 AI 应用系统中&#xff0c;主模型&#xff08;如 GPT-4o、Claude 3.5 等&#xff09;通常承担核心推理任务。但在生产环境中&#xff0c;主模型可能因额度耗尽、响应超时、服务不可用或突发限流等原因导致调用失败。此时&#xff0c;用户侧可能表现为…...

ceshi1

进入2026年&#xff0c;企业数字化转型已从“流程数字化”全面转向“认知自动化”。 据最新行业数据显示&#xff0c;企业内部超过85%的数据以PDF、图片、音视频、扫描件等非结构化形式存在。 这些数据曾被视为“沉默的资产”&#xff0c;因为传统OCR或规则引擎难以处理其复杂的…...

如何高效使用AutoHotkey编译器:Ahk2Exe完整指南与实战技巧

如何高效使用AutoHotkey编译器&#xff1a;Ahk2Exe完整指南与实战技巧 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 对于Windows自动化脚本开发者而言&#xff…...

AMP插件开发者工具完全指南:如何快速诊断和修复AMP验证问题

AMP插件开发者工具完全指南&#xff1a;如何快速诊断和修复AMP验证问题 【免费下载链接】amp-wp Enable AMP on your WordPress site, the WordPress way. 项目地址: https://gitcode.com/gh_mirrors/am/amp-wp 你是否正在为WordPress网站的AMP验证问题而烦恼&#xff1…...

IDA逆向分析实战:破解函数限制、修复栈平衡与Switch识别

1. 破解IDA函数大小限制的实战技巧 第一次用IDA反编译大型函数时&#xff0c;看到"function is too big"的提示真是让人头疼。这个限制其实是IDA为了防止资源耗尽设置的保险机制&#xff0c;但现代计算机的性能早已今非昔比。我去年分析一个游戏引擎时&#xff0c;核…...

Minecraft MASA模组汉化包:打破语言障碍的终极解决方案

Minecraft MASA模组汉化包&#xff1a;打破语言障碍的终极解决方案 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft中MASA模组的英文界面感到困扰吗&#xff1f;MASA模组…...