【初阶数据结构】——牛客:CM11 链表分割

文章目录

  • 1. 题目介绍
  • 2. 思路分析
  • 3. 代码实现

1. 题目介绍

链接: link
在这里插入图片描述
这道题是给我们一个链表和一个值X ,要求我们以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。
最终返回重新排列之后的链表的头指针。

2. 思路分析

那这道题呢比较简单的一种思路是这样的:

新建两个链表less和greater,遍历原链表将原链表中值小于X的结点尾插(题目要求不能改变原来的数据顺序)到less链表,将大于等于X的结点尾插到greater链表,然后将两个链表合并:greater链接到less后面。

那么另外呢:

对于新建的链表我们可以选择不带哨兵位的头结点,也可以选择带哨兵位的头结点的链表。
但是,对于这道题来说建议大家选取带头结点的链表结构
如果不带头的话,实现起来就会比较麻烦。带头的和就会方便很多。
首先带头结点的话尾插的时候空表的情况不需要单独判断,另外如果出现链表结点的值都比给定的X大,那这样第一个链表就是空,如果有头结点的话,空表状态也有一个头结点,这里把第二个链表往第一个链表后面链接的时候也会很方便。
当然如果是带头结点的话最后链接返回之后最好把头结点也释放掉。
在这里插入图片描述

那按照上面的思路,我们来尝试写一下代码

3. 代码实现

在这里插入图片描述

感觉好像没什么问题了,我们来提交一下:
在这里插入图片描述

🆗,我们看到没有通过全部的测试用例,怎么回事呢?

有一种情况我们没能处理好:
如果重新排列之后的尾结点不是原链表的尾结点,就会有一个问题。
其实我们上面给大家画的那个图就是这样
在这里插入图片描述
大家看到了嘛,这里的7这个结点,是重新排列之后的尾结点,但是不是原链表的尾结点,我们这样连接之后,7是尾结点,尾结点的next应该指向空,但是此时它仍然指向原链表中他后面的那个结点4,那么这样的话我们返回的链表就是一个带环的链表,遍历的时候就会陷入死循环。

我们可以来测试一下图中的这个测试用例,看看是不是这样:

在这里插入图片描述
我们看到后面就陷入了7,4,2,6的死循环。

所以:

不论最终的尾结点是不是原链表的尾结点,我们都把它置成NULL
在这里插入图片描述
再来提交
在这里插入图片描述
就🆗了。

class Partition {public:struct ListNode* partition(struct ListNode* pHead, int x) {struct ListNode* smallhead = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* bighead = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* smalltail = smallhead;smalltail->next = NULL;struct ListNode* bigtail = bighead;bigtail->next = NULL;struct ListNode* cur = pHead;while (cur) {if (cur->val < x) {smalltail->next = cur;smalltail = cur;} else {bigtail->next = cur;bigtail = cur;}cur = cur->next;}smalltail->next = bighead->next;bigtail->next=NULL;pHead = smallhead->next;free(smallhead);free(bighead);return pHead;}
};

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

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

相关文章

Redis 的慢日志

Redis 的慢日志 Redis 的慢日志&#xff08;Slow Log&#xff09;是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈&#xff0c;定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…

hcip综合实验2

目录 实验拓扑&#xff1a; 实验要求&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 1.配置设备接口IP 2.通过配置缺省路由让公网互通 3.配置ppp 1.R1和R5间的ppp的PAP认证&#xff1b; 2.R2与R5之间的ppp的CHAP认证; 3. R3与R5之间的HDLC封装; 4.构建R1、…

K8S故障处理指南:pod驱逐问题处理

更多技术博客,请关注微信公众号:运维之美 在K8S集群故障处理过程中,你可能遇到过pod的各种状态,Evicted状态代表你的K8S环境遇到了资源驱逐的问题,本节通过对驱逐问题的解决,参数的调整,问题的处理思路,希望给你解决此类问题提供帮助。 一、pod驱逐问题 pod出现状态为…

如何系统的自学python?

系统地自学Python是一个循序渐进的过程&#xff0c;以下是一份详细的指南&#xff0c;帮助你从零开始逐步掌握这门语言&#xff1a; 1、了解Python及其应用场景&#xff1a; 阅读关于Python的简介&#xff0c;理解它为何流行&#xff0c;以及在哪些领域&#xff08;如Web开发…

GitHub | Pages 部署 Vue 项目但页面空白,报错:net::ERR_ABORTED 404 (Not Found)

目录 报错信息 解决方法 报错信息 如下所示&#xff08;地址已盲&#xff09;&#xff1a; 控制台报错说找不到这些资源&#xff0c;但是 dist 目录下都有这些 JS 文件啊&#xff0c;这是为什么&#xff1f; 解决方法 在 Vue 项目的 vue.config.js 文件中&#xff0c;添加 …

FANUC机器人故障诊断—报警代码更新(三)

FANUC机器人故障诊断中&#xff0c;有些报警代码&#xff0c;继续更新如下。 一、报警代码&#xff08;SRVO-348&#xff09; SRVO-348DCS MCC关闭报警a&#xff0c;b [原因]向电磁接触器发出了关闭指令&#xff0c;而电磁接触器尚未关闭。 [对策] 1.当急停单元上连接了CRMA…

在ROS上快速验证PID算法

在ROS上快速验证PID算法 前言 最近有在外面出差授课的工作任务&#xff0c;其中有一个环节是给大家讲述PID相关的内容&#xff0c;在制作相关PPT的时候查询了很多资料&#xff0c;但是写着写着突然意识到一个问题&#xff0c;PID已经在控制专业学习过程以及工程开发时间中那么…

Electron 读取本地配置 增加缩放功能(ctrl+scroll)

最近&#xff0c;一个之前做的electron桌面应用&#xff0c;需要增加两个功能&#xff1b;第一是读取本地的配置文件&#xff0c;然后记载配置文件中的ip地址&#xff1b;第二就是增加缩放功能&#xff1b; 第一&#xff0c;配置本地文件 首先需要在vue工程根目录中&#xff0…

创建第一个51文件

1.找一个文件目录创建一个main.c 比如我的 F:\my_project\project_of_51\0.first_of_51 什么你不会&#xff1f; 先把这里的文件扩展名打开; 再创建一个文本文件&#xff0c;重新命名为main.c // 修改.c 后弹出一个确认修改的框&#xff0c;选确认即可 2.kei操作: 1&#xf…

与鲸同行,智领未来!和鲸科技“人工智能+X”学科建设合作交流会(北京站)圆满结束!

在国家加快发展新质生产力的大背景下&#xff0c;3月25日下午&#xff0c;和鲸科技 2024 年“人工智能X”学科建设合作交流会&#xff08;北京站&#xff09;暨“AIX”实验室建设与供应商选型座谈会顺利召开。为提供更为集中和专业的讨论环境&#xff0c;本次会议特别采取闭门审…

fastdfs-通信协议-自定义指令码拓展

文章目录 一、fasdfs 通信协议1. 公共命令码2. 发送给storage server的命令码二、fastdfs storage自定义指令码1. 自定义storage server的命令码:计算文件md5三、参考一、fasdfs 通信协议 官方参考:https://mp.weixin.qq.com/s/lpWEv3NCLkfKmtzKJ5lGzQ FastDFS采用二进制TC…

c语言例题,逐个打印数字

今天来分享个比较简单的程序例题&#xff0c;也是比较经典的一个新手例题&#xff0c;逐个打印输入的数字。我们直接从主函数看起&#xff0c;先定义一个num变量&#xff0c;同时变量的类型是unsigned int&#xff0c;这个类型的意思是无符号的整型变量&#xff0c;unsigned&am…

代码随想录算法训练营Day39|LC62 不同路径LC63 不同路径II

一句话总结&#xff1a;不是太难&#xff0c;状态转移方程好想。 原题链接&#xff1a;62 不同路径 位置为(i, j)的点只能从上面或者左边过来&#xff0c;由此可列出状态转移方程。状态转移方程的初始化为所有第一排和第一列的点都初始化为1即可。 class Solution {public i…

SD-WAN网络构建要点简述

近年来&#xff0c;SD-WAN已成为企业网络优化的热门选择。SD-WAN代表软件定义广域网&#xff0c;是一种基于软件的网络解决方案&#xff0c;旨在提高企业网络连接的可靠性、安全性和性能。相比传统网络架构&#xff0c;SD-WAN技术通过虚拟化网络通信&#xff0c;利用智能软件和…

数据结构进阶篇 之 【二叉树顺序存储(堆)】的整体实现讲解(赋完整实现代码)

做人要谦虚&#xff0c;多听听别人的意见&#xff0c;然后记录下来&#xff0c;看看谁对你有意见 一、二叉树的顺序&#xff08;堆&#xff09;结构及实现 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1 向下调整算法 AdJustDown 3.2 向上调整算法 AdJustUP 3.3 …

AndroidStudio出现类似 Could not create task ‘:app:ToolOperatorDemo.main()‘. 错误

先看我们的报错 翻译过来大概意思是:无法创建任务:app:ToolOperatorDemo.main()。 没有找到名称为“main”的源集。 解决方法&#xff1a; 在.idea文件夹下的gradle.xml文件中 <GradleProjectSettings>标签下添加<option name"delegatedBuild" value"f…

这样使用ChatGPT,效率翻倍不是梦!四大秘诀公开

随着ChatGPT技术的不断革新&#xff0c;它在我们日常工作中扮演着越来越重要的角色。那么&#xff0c;我们该如何利用ChatGPT来解决工作难题呢&#xff1f; Q1&#xff1a;想要迅速获得ChatGPT的帮助&#xff0c;我们应如何提出问题&#xff1f; 以下是几条高效提问的建议&…

前端学习<二>CSS基础——11-CSS3属性详解(一)

前言 我们在上一篇文章中学习了CSS3的选择器&#xff0c;本文来学一下CSS3的一些属性。 本文主要内容&#xff1a; 文本 盒模型中的 box-sizing 属性 处理兼容性问题&#xff1a;私有前缀 边框 背景属性 渐变 文本 text-shadow&#xff1a;设置文本的阴影 格式举例&…

FPGA芯片在通信基站中的作用

基站作为移动通信系统的核心组成部分&#xff0c;承担着信号的发送和接收任务&#xff0c;包括天线、射频前端、数字信号处理和控制等功能。 随着通信技术不断进步和网络容量的提升&#xff0c;基站功能日益复杂&#xff0c;数量也在增加。 与此同时&#xff0c;FPGA芯片被广…

@EnableWebMvc 导致自定义序列化器失效

目录 前言 一. 自定义序列化器失效 1.1 EnableWebMvc 的作用 1.2 EnableWebMvc 带来了什么后果 1.3 原理分析 1.4 问题解决 二. 总结 前言 在使用Swagger的时候用 到了EnableWebMvc&#xff0c;发现之前为了解决Long类型、日期类型等自定义序列化器失效了 Configurati…