链表的分割——哨兵位

news2025/1/13 13:50:40

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

思路,把链表分成两个新链表,然后连接起来
在这里插入图片描述
代码:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        if(pHead==NULL)
        {
            return pHead;
        }
         ListNode* ghead=NULL;
         ListNode* gtail=NULL;
         ListNode* lhead=NULL;
         ListNode* ltail=NULL;
         ListNode* cur=pHead;
         while(cur)
         {
            if(cur->val<x)
            {
                if(ltail==NULL)
                {
                    lhead=ltail=cur;
                }else 
                {
                    ltail->next=cur;
                    ltail=ltail->next;
                }
                cur=cur->next;
            }else
            {
               if(gtail==NULL)
               {
                ghead=gtail=cur;
               } else{
                gtail->next=cur;
                gtail=gtail->next;
               }
               cur=cur->next;
            }
         }
         if(gtail)//储存大的那个那个链表如果不是空,那么就要把最后一个节点的next置空
         {
         gtail->next=NULL;

         }
          else//如果gtail是空的话,那么就全都是小的数在lhead里,直接返回那么链表就行
         {
            return pHead;
         }
         if(lhead)
         {
            ltail->next=ghead;
             return lhead;
         }else {
         return lhead;
         }
        
         
        
        
    }
};

判断头的代码过于繁琐,那么就利用链表的标兵:
在这里插入图片描述
代码:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        if(pHead==NULL)
        {
            return pHead;
        }
         ListNode* ghead=NULL;
         ListNode* gtail=NULL;
         ghead=gtail=(struct ListNode*)malloc(sizeof(struct ListNode));
         ListNode* lhead=NULL;
         ListNode* ltail=NULL;
         lhead=ltail=(struct ListNode*)malloc(sizeof(struct ListNode));

         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;

         }
         
         gtail->next=NULL;

         
          ltail->next=ghead->next;
          struct ListNode* per=lhead->next;
          free(lhead);
          free(ghead);

         return per;
         
        
         
        
        
    }
};

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

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

相关文章

vue3 @click那些事

vue3element-plus vue3 click那些事 1.动态决定click能否点击 1.动态决定click能否点击 只需要在点击事件前加一个判断条件

MTK联发科MT6762/MT8788安卓核心板性能参数对比

MT6762核心板是联发科的八核处理器&#xff0c;采用12nm制程工艺。MT6762具有集成的蓝牙、fm、WLAN和gps模块&#xff0c;是一个高度集成的基带平台&#xff0c;包括调制解调器和应用处理子系统启用LTE/LTE-A和C2K智能手机应用程序。MT6762芯片集成了ARM Cortex-A53&#xff0c…

乒乓球廉价底板和套胶对比分析

手机最近没办法写微博&#xff0c;在火车上没事&#xff0c;折腾了下&#xff0c;升级后可以了&#xff0c;我近期又打了很多套胶&#xff0c;我还录了段粘拍的视频一会分享。 这次我还是说几款底板和套胶的感受&#xff0c;最近买了dj200不带A底板&#xff0c;palio cc 和银河…

Git小乌龟不弹add push commit的方法

1.关于使用Git小乌龟无法弹出Add菜单的问题 第一次使用小乌龟软件&#xff0c;发现可以正常将程序从Gitee仓库中克隆到本地&#xff0c;但是在将本地的程序上传到Gitee仓库中时&#xff0c;TortoiseGit无法弹出Add那一系列菜单&#xff0c;如下图所示&#xff1a; 2.解决方法 …

大数据-hadoop

1.hadoop介绍 1.1 起源 1.2 版本 1.3生产环境版本选择 Hadoop三大发行版本:Apache、Cloudera、Hortonworks Apache版本最原始的版本 Cloudera在大型互联网企业中用的较多 Hortonworks文档较好 1.4架构 hadoop由三个模块组成 分布式存储HDFS 分布式计算MapReduce 资源调度引擎Y…

Kubernetes 部署RocketMQ高可用集群

Kubernetes 部署RocketMQ高可用集群 导言RocketMQ 常用的部署模式如下单 Master 模式多 Master 多 Slave-异步复制模式 离线镜像制作1.安装 Go 1.162.制作 RocketMQ Operator Image获取 RocketMQ Operator制作 RocketMQ Operator Image 3.制作 RocketMQ Broker Image制作 Rocke…

助力经销商打赢旺季攻坚战,全兴在全国范围内拉开“兴风暴”

执笔 | 姜 姜 编辑 | 萧 萧 中秋、国庆历来是白酒消费的旺季&#xff0c;也是完成当年任务的关键期&#xff0c;尤其今年“双节”合一&#xff0c;各大食品饮料企业都憋足了劲&#xff0c;白酒促销大戏也轮番上演。 作为中国“老八大名酒”之一的全兴酒业谋定而动&#x…

PyTorch C++ 前端:张量

本篇文章将尝试了解 PyTorch 组件的高级概述以及它们如何配合。 PyTorch 组件的高级概述 后端 PyTorch 后端是用 C++ 编写的,它提供 API 来访问高度优化的库,例如:用于高效矩阵运算的张量库、用于执行 GPU 运算的 CUDA 库以及用于梯度计算的自动微分等。 前端 可以使用…

Vue2+ElementUI 静态首页案例

源码 <template><div class"app-container home"><el-row type"flex" justify"space-around" class"row-bg"><el-card class"box-card cardDiv1"><el-col :span"5"><div clas…

React antd Select 无法在disabled状态下选择并复制输入框内的内容情况分析及解决方案

文章目录 背景问题分析解决思路一&#xff1a;会不会是由于在选择框内hover的时候出现的那个图标导致的解决思路二&#xff1a;会不会是这个span禁止复制解决思路三&#xff1a;去看看antd具体实现 最终解决方案其他版本的解决方案antd3.*antd5.* 背景 在React项目开发中&…

蓝桥杯打卡Day13天

文章目录 整数拆分神奇的口袋 一、整数拆分OJ链接 本题思路:本题是一道简单的01背包问题。由于题目中说将数字拆分成2的幂&#xff0c;而且可以重复使用。 Python代码&#xff1a; N1000010 modint(1e9)f[0]*N;nint(input())f[0]1i1 while i<n:for j in range(i,n1):f[j…

命名和代码风格

一段代码&#xff0c;一个方法后面要打换行&#xff01;&#xff01;&#xff01;&#xff01; api的js代码引入的时候要分开回车空行&#xff0c;例如api的Project.js 命名规则&#xff1a; t-dialog控件显示的visible命名的时候例如&#xff1a;visibleVerify&#xff0c;显…

sudo apt-get update失败的原因和解决方法

ubuntu更新资源包时出现连接超时的问题&#xff1a; 无法发起与 cn.archive.ubuntu.com:80 (2403:2c80:5::6) 的连接 - connect (101: 网络不可达) 无法连接上 cn.archive.ubuntu.com:80 (45.125.0.6)&#xff0c;连接超时 正在读取软件包列表… 完成 W: 无法下载 http://cn.ar…

一文介绍使用 JIT 认证后实时同步用户更加优雅

首先本次说的 JIT 指的是 Just In Time &#xff0c;可以理解为及时录入&#xff0c;一般用在什么样的场景呢&#xff1f; 还记的上次我们说过关于第三方组织结构同步的功能实现&#xff0c;主要目的是将第三方源数据同步到内部平台中来&#xff0c;方便做管控和处理 此处的管…

java.lang.ClassNotFoundException: rx.Single(hystrix)

做springcloud整合hystrix时候&#xff0c;接口加上HystrixCommand后报错。 原因是hystrix依赖的第三方Jar----rxjava版本低&#xff0c;把rxjava更新为最新jar即可

Linux Day18 TCP_UDP协议及相关知识

一、网络基础概念 1.1 网络 网络是由若干结点和连接这些结点的链路组成&#xff0c;网络中的结点可以是计算机&#xff0c;交换机、 路由器等设备。 1.2 互联网 把多个网络连接起来就构成了互联网。目前最大的互联网就是因特网。 网络设备有&#xff1a;交换机、路由器、…

C语言基础知识点(八)联合体和大小端模式

以下程序的输出是&#xff08;&#xff09; union myun {struct { int x, y, z;} u;int k; } a; int main() {a.u.x 4;a.u.y 5;a.u.z 6;a.k 0;printf("%d\n", a.u.x); } 小端模式 数据的低位放在低地址空间&#xff0c;数据的高位放在高地址空间 简记&#xff…

c指针进阶

目录 char* 指针 指针数组 数组指针 应用 接收一维数组(不常用) 接收二维数组 存放数组指针的数组 一维数组传参 二维数组传参 函数指针 两段有趣的代码 函数指针数组 应用——计算器 指向函数指针数组的指针 回调函数 qsort 修改冒泡排序 char* 指针 一个char*…

Android:创建jniLibs的步骤

一、前言&#xff1a; android libs&#xff0c;jniLibs库的基本使用 libs&#xff0c;jniLibs用来存放各种.so库文件。如果没有jniLibs目录需要自己手动创建&#xff0c;并且库名称也不能随便更改。 二、解决方案&#xff1a; 我之前弄了好久也弄不出来&#xff0c;之前有说…

ubuntu20.04下源码编译colmap3.9

由于稠密重建需要CUDA&#xff0c;因此先安装CUDA&#xff0c;我使用的是3050GPU&#xff0c;nvidia-smi显示最高支持CUDA11.4。 不要用sudo apt安装&#xff0c;版本较低&#xff0c;30系显卡建议安装CUDA11.0以上&#xff0c;这里安装了11.1版本。 下载&#xff1a; cuda_1…