牛客网---CM11 链表分割 代码详解+哨兵位的比较

news2024/11/18 3:37:59

文章目录

  • 前言
  • CM11 链表分割
    • 链接:
    • 方法一:尾插(带哨兵位)
      • 1.1 思路:
      • 1.2 代码:
      • 1.3 流程图
      • 1.4 注意点
    • 方法二:尾插(不带哨兵位)
      • 2.1代码:
    • 对比:
  • 总结


前言

独处未必孤独喜欢就是自由
本章的内容是牛客网随机一题的部分方法的解析


提示:以下是本篇文章正文内容,下面案例可供参考

CM11 链表分割

链接:

CM11 链表分割 link

方法一:尾插(带哨兵位)

1.1 思路:

把小于x的尾插第一个链表,大于x的尾插第二个链表,最后链接在一起

1.2 代码:

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

1.3 流程图

在这里插入图片描述

1.4 注意点

  • 易错点一: lesstail->next=greaterhead->next
    这是带哨兵位的链表,所以应该是 lesstail->next=greaterhead->next;而不应该是 lesstail=greaterhead;
  • 易错点二:末尾要置空否则造成循环链表greatertail->next=NULL;
    一定要加上greatertail->next=NULL;不然当出现一个链表中既有大于x又有小于x的时候(例如上述流程图7的next指向的还是2如果不置空就会造成循环)
    在这里插入图片描述

方法二:尾插(不带哨兵位)

2.1代码:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) 
    {
        struct ListNode* lesshead,*lesstail,*greaterhead,*greatertail;
        lesshead=lesstail=NULL;
        greaterhead=greatertail=NULL;
        struct ListNode* cur=pHead;
        while(cur)
        {
            if(cur->val<x)
            {
                if(lesstail==NULL)
                {
                    lesstail=lesshead=cur;
                }
                else 
                {
                    lesstail->next=cur;
                    lesstail=lesstail->next;
                }
            }
            else 
            {
                if(greatertail==NULL)
                {
                    greatertail=greaterhead=cur;
                }
                else 
                {
                    greatertail->next=cur;
                    greatertail=greatertail->next;
                }
            }
            cur=cur->next;
        }
        if(lesstail==NULL)
        {
            return greaterhead;
        }
        else 
        {
             lesstail->next=greaterhead;
        }       
        if(greatertail!=NULL)
        {
            greatertail->next=NULL;
        }
        pHead=lesshead;
        return pHead;
    }
};

对比:

对比方法一和方法二,很明显带哨兵位可以优化代码减少判断的次数不用考虑头节点是否为空的情况


总结

Ending,今天的内容就到此结束啦,如果后续想了解更多,就请关注我吧,一键三连,还有许多种方法没有写出希望各位佬补充哦~

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

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

相关文章

Chapter4:频率响应法(上)

第四章:频率响应法 Exercise4.1 已知微分网络和积分网络电路图如下图所示,求网络的频率特性。 解: 【图 ( a ) ({\rm a}) (a)微分网络】 由微分网络电路图可得:

c# 运算符重载

1.概要 1.1可重载运算符 可重载运算符说明 x, -x, !x, ~x, , --, true, falsetrue和 false 运算符必须一起重载。 x y, x - y, x * y, x / y, x % y, x & y, x | y, x ^ y, x << y, x >> y, x >>> y x y, x ! y, x < y, x > y, x < y,…

使用NNI对BERT模型进行粗剪枝、蒸馏与微调

前言 模型剪枝&#xff08;Model Pruning&#xff09;是一种用于减少神经网络模型尺寸和计算复杂度的技术。通过剪枝&#xff0c;可以去除模型中冗余的参数和连接&#xff0c;从而减小模型的存储需求和推理时间&#xff0c;同时保持模型的性能。模型剪枝的一般步骤&#xff1a…

OpenAI文本生成器-怎么解决openai只写一半

openai写文案写一半没了怎么解决 如果您正在使用 OpenAI 写文案的服务&#xff0c;在撰写文案的过程中遇到了意外中断或者其他问题导致文案未保存&#xff0c;以下是一些有用的解决方法&#xff1a; 重新调用 API 去生成文案。您可以调用 OpenAI 的 API 重新获取您所需的文案…

Three.js--》几何体顶点知识讲解

目录 几何体顶点位置数据 点线定义几何体顶点数据 网格模型定义几何体顶点数据 顶点法线数据 实现阵列立方体与相机适配 常见几何体简介 几何体的旋转、缩放、平移方法 几何体顶点位置数据 本篇文章主要讲解几何体的顶点概念&#xff0c;相对偏底层一些&#xff0c;不过…

魔兽世界商业服务端定制商人自定义NPC教程

魔兽世界自定义NPC教程 大家好&#xff0c;我是艾西今天跟大家聊一下自定义NPC&#xff0c;自定义NPC可以添加自己想要售卖的物品以及定价等可以更好的将一个游戏设定以及游戏的拓展性有质的提升 creature表是游戏所有生物人物等表格 Creature_template是所有生物模板&#xf…

kafka快的原因(四)

四、kafka快的原因 4.1 顺序读写page cache 见上一节文件系统 使用6个7200rpm、SATA接口、RAID-5的磁盘阵列在JBOD配置下的顺序写入的性能约为600MB/秒&#xff0c;但随机写入的性能仅约为100k/秒&#xff0c;相差6000倍以上。 4.2 网络模型 4.2.1 reactor模型 4.2.2 epo…

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶&#xff1a;开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段&#xff1a;开发应用程序&#xff0c;编写Dockerfile; 持续集成阶段&#…

gradle 模块

目录 ​settings.gradle文件的作用 SourceSet类的作用 Plugin 插件 Java 对 Plugin 的扩展 settings.gradle文件的作用 settings用于配置哪些工程是要被gradle集成的&#xff0c;gradle 通过 Settings.java 类来处理 settings.gradle 文件。 gradle的初始化阶段&#xff0c…

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们详细讨论直播的相关协议&#xff0c;包括&#xff1a;HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。 我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。 我们按这样的顺序讨论​ 1、 RTMP、HTTP-FLV 2、 …

【五一创作】红黑树数据结构

现在JAVASE中HashMap中底层源码是由数组链表红黑树进行设计的&#xff0c;然后很多地方也是用到红黑树&#xff0c;这里单独对红黑树数据结构进行简单的介绍。 目录 红黑树概念 红黑树的性质 自平衡规则 代码 红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;…

flink-on-yarn两种提交模式及其区别

一、session模式 在yarn上启动一个flink集群&#xff0c;并重复使用该集群&#xff0c;后续提交的任务都是提交给该集群&#xff0c;资源会一直被占用&#xff0c;除非手动关闭。 特点&#xff1a;需要事先申请资源&#xff0c;启动JobManager和TaskManager。 优点&#xff1a…

网卡丢失导致集群异常

假期晚上有个电话&#xff0c;说集群故障&#xff0c;应用无法连接&#xff0c;节点一可以ssh登录&#xff0c;节点二已无法正常登录了&#xff0c;在节点一上需要ssh 私网ip地址才可以登录节点二&#xff0c;虽不是重点客户&#xff0c;有问题还是需要积极处理。 首先看集群状…

LeetCode - 239 滑动窗口最大值

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k…

AutoCAD介绍——带你了解最强的CAD软件

AutoCAD介绍——带你了解最强的CAD软件 什么是AutoCAD应用领域功能特点版本发展总结 什么是AutoCAD Autodesk的AutoCAD是一款世界著名的CAD软件&#xff0c;其全称为“Auto Computer-Aided Design”&#xff0c;是一种计算机辅助设计工具&#xff0c;用于帮助用户创建和编辑二…

k8s之审计日志

一、为什么要有审计 Kube-Apiserver 的负载突然变高&#xff0c;大量访问失败&#xff0c;集群中到底发生了什么&#xff1f; 当集群发生问题时&#xff0c;这是Metric一般会失效&#xff0c;为了排查以上问题&#xff0c;k8s 提供了两种原生的日志形式——审计&#xff08;A…

PID整定二:基于Ziegler-Nichols的频域响应

PID整定二&#xff1a;基于Ziegler-Nichols的频域响应 1参考2连续Ziegler-Nichols方法的PID整定2.1整定方法2.2仿真示例 1参考 1.1根轨迹图的绘制及分析 1.2计算机控制技术01-3.4离散系统的根轨迹分析法 1.3PID控制算法学习笔记 2连续Ziegler-Nichols方法的PID整定 2.1整定…

2023软考中级《软件设计师》(备考冲刺版) | 知识产权与标准化

1.知识产权 1.1 保护对象和范围 1.2 保护期限 注意&#xff1a;注册商标续注可延长 1.3 知识产权人确定 1.3.1 职务作品&#xff08;区分个人和公司单位&#xff1a;大部分都是公司单位&#xff09; 1.3.2 委托开发、合作开发与同时申请 1.4 侵权判定 1.第二十五条对下列各…

操作系统——线程调度

0.关注博主有更多知识 操作系统入门知识合集 目录 6.1线程调度概念 思考题&#xff1a; 6.2典型调度算法 思考题&#xff1a; 6.3Linux线程调度 6.1线程调度概念 在第四章曾经介绍过&#xff0c;线程是操作系统调度的基本单位&#xff0c;那么本篇就不再以进程的视角去…

【操作系统OS】学习笔记第二章 进程与线程(下)【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…