C语言每日一题:11.《数据结构》链表分割。

news2024/10/5 13:50:38

题目一:

请添加图片描述
题目链接:

思路一:使用带头链表

1.构建两个新的带头链表,头节点不存储数据。
2.循环遍历原来的链表。
3.小于x的尾插到第一个链表。
4.大于等于x尾插到第二个链表。
5.进行链表合并,注意第二个链表的尾的下一个需要置空防止成环。
6.free两个头之前需要保存新的满足条件的单链表的头。

请添加图片描述

#include <cstddef>
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        struct ListNode* cur=pHead;
        //使用头节点先开辟一个节点
        struct ListNode* lefthead,*lefttile;
        struct ListNode* righthead,*righttile;

        lefthead=lefttile=(ListNode*)malloc(sizeof(ListNode));
        righthead=righttile=(ListNode*)malloc(sizeof(ListNode));

        //遍历链表分到左右两个链表里面
        while(cur)
        {
            ListNode* next=cur->next;
            //比cur小于等于
            if(cur->val<x)
            {
                lefttile->next=cur;
                lefttile=lefttile->next;
            }
            else 
            {
                righttile->next=cur;
                righttile=righttile->next;
            }
            cur=next;
        }
        //进行连接,有可能成环所以比x大的链表部分结尾需要置空。
        lefttile->next=righthead->next;
        righttile->next=NULL;
        struct ListNode* head=lefthead->next;
        //tile不可以释放
        free(lefthead),free(righthead);
        return head;
    }
};

思路二:使用单链表

1.有一些地方需要更改。
2.两个链表都有数据,链表初始化头和尾是需要判断的。
3.两个链表都有数据那么跟上一个在链接上是差不多的。
4.当其中一个链表没有数据的时候返回另一个链表的第一个。

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here

        //不开辟头节点
        struct ListNode* leftfirst=NULL,*lefttile=NULL;
        struct ListNode* rightfirst=NULL,*righttile=NULL;
        //
        struct ListNode* cur=pHead;
        //不存在头节点是需要判断的。
        while(cur)
        {
            struct ListNode* next=cur->next;
            if(cur->val<x)
            {
                if(leftfirst==NULL)
                {
                    leftfirst=lefttile=cur;
                }
                else
                {
                    lefttile->next=cur;
                    lefttile=lefttile->next;
                }

            }

            else
            {
                if(rightfirst==NULL)
                {
                    rightfirst=righttile=cur;
                }
                else
                {
                    righttile->next=cur;
                    righttile=righttile->next;
                }
            
            }
            cur=next;
        }
        
        if(lefttile==NULL)
        {
            return rightfirst;
        }
        if(righttile==NULL)
        {
            return leftfirst;
        }

        lefttile->next=rightfirst;
        righttile->next=NULL; 

        return leftfirst;
    }
};

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

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

相关文章

IO进程线程第四天(8.1)

作业1&#xff1a; 从终端获取一个文件的路径以及名字。 若该文件是目录文件&#xff0c;则将该文件下的所有文件的属性显示到终端&#xff0c;类似ls -l该文件夹 若该文件不是目录文件&#xff0c;则显示该文件的属性到终端上&#xff0c;类似ls -l这单个文件 #include<…

ad+硬件每日学习十个知识点(16)23.7.27 (总线保持、lin报文、逻辑器件手册解读)

文章目录 1.总线保持是怎么实现的&#xff1f;有什么需要注意的&#xff08;驱动电流和电阻&#xff09;&#xff1f;2.LIN报文3.芯片datasheet的features、applications、description看完&#xff0c;应该能大致判断逻辑器件能否满足我们的要求。4.什么是逻辑器件的传输延时&a…

系统架构设计师_备考第1天

文章目录 前言一、软考历史与体系二、考试价值与意义三、软考报名与交费四、考试介绍五、综合备考策略 前言 从今天开始&#xff0c;会认真备考系统架构设计师&#xff0c;希望95天后&#xff0c;拿下软考证书。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可…

P3372 【模板】线段树 1(内附封面)

【模板】线段树 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 …

深度学习(33)——CycleGAN(1)

深度学习&#xff08;33&#xff09;——CycleGAN&#xff08;1&#xff09; 完整项目在在这里&#xff1a;欢迎造访 文章目录 深度学习&#xff08;33&#xff09;——CycleGAN&#xff08;1&#xff09;1. Generator2. Discriminator3. fake pool4. loss定义5. 模型参数量6…

Nodejs 第七章(发布npm包)

发布npm的包的好处是什么 方便团队或者跨团队共享代码&#xff0c;使用npm包就可以方便的管理&#xff0c;并且还可以进行版本控制做开源造轮子必备技术&#xff0c;否则你做完的轮子如何让别人使用难道是U盘拷贝&#xff1f;面试题我面字节的时候就问到了这个增加个人IP 让更…

消息队列之 - 消息持久化设计

目录 前言设计思想消息文件的格式垃圾回收的思想其他情况序列化和反序列化 具体代码实现测试消息文件 前言 我们之前说过, 消息队列不管要往硬盘中存储, 还要往内存中存储, 并且是以内存为主 ,硬盘为辅, 接下来, 就将消息队列如何存储到硬盘 做一个设计 设计思想 我们往硬盘…

云服务器无法远程连接服务

问题 今天刚买了华为的云服务器&#xff0c;通过宝塔安装了对应的基础服务&#xff0c;也在华为云的官网上设置了安全组。此时万事俱备只欠东风&#xff0c;我测试使用sqlyog进行远程连接。原本已经在准备部署项目了&#xff0c;现实给了我重重的一拳。 sqlyog爆2003代码错误&…

交换机VLAN技术和实验(eNSP)

目录 一&#xff0c;交换机的演变 1.1&#xff0c;最小网络单元 1.2&#xff0c;中继器&#xff08;物理层&#xff09; 1.3&#xff0c;集线器&#xff08;物理层&#xff09; 1.4&#xff0c;网桥&#xff08;数据链路层&#xff09; 二&#xff0c;交换机的工作行为 2.…

IO进线程——库的制作(静态库、动态库)

库的制作 1、静态库 ①生成二进制文件 gcc -c linkstack.c -o linkstack.o②制作静态库文件&#xff0c;把.o文件转换为.a文件 ar crs liblinkstack.a linkstack.o③编译时链接 gcc linkstack_main.c -L. -llinkstack2、动态库 ①生成地址无关二进制文件 gcc -fPIC -c l…

《工具箱-VNCServer》配置VNCServer,使用VNCViewer实现局域网内页面共享

VNCServer设置 通过VNCServer配置&#xff0c;与VNCviewer配套使用 1.下载并安装VNCServer 2.邮箱密码注册后用户登录 3.设置VNC密码 4.设置viewer不能控制本机 5.打开VNClicensewiz&#xff0c;选择“Enter a license key …” BQ24G-PDXE4-KKKRS-WBHZE-F5RCA BQ24G-PDXE4-…

mysql进阶-修改linux服务器中MySQL的字符集

1.背景 linux中mysql8默认的字符集是latin1&#xff0c;在插入中文时会报错&#xff0c;所以一般在配置好mysql时需要修改字符集为utf8【又叫utfmb3,一般开发够用&#xff0c;一个字符用3个字节表示】或者utfmb4【一个字符用4个字节表示&#xff0c;如果存储emoji表情&#xf…

Linux实战:五子棋

一、五子棋原理 采用二维数组保存棋盘信息,棋盘上面的任何一个位置,里面可以放置三类信息。 空用户1的落子(黑子)用户2的落子(白子)下棋就是在二维数组中找对应的空位置,进行落子落完子之后下来就要考虑该落子位置是否有”五子连珠“,进而进行输赢判定,每一次走棋,多…

如何让python在手机上运行,python在手机上怎么运行

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python程序如何在手机上运行&#xff0c;如何让python在手机上运行&#xff0c;现在让我们一起来看看吧&#xff01; 在计算机语言的运用过程中PythonS60手机是经常被使用的计算机语言&#xff0c;以下的文章是介绍Pyth…

华为OD机试真题 JavaScript 实现【明明的随机数】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试&#xff0c;发现新题目&#x…

Python超实用!批量重命名文件/文件夹,只需1行代码

大家好&#xff0c;这里是程序员晚枫&#xff0c;之前在小破站给大家分享了一个视频&#xff1a;批量重命名文件。 最近在程序员晚枫的读者群里&#xff0c;发现很多朋友对这个功能很感兴趣&#xff0c;尤其是对下一步的优化&#xff1a;批量重命名文件夹。 这周我利用下班时…

Java 解析Excel单元格的富文本

1. 总体介绍 该方法是解析 xlsx 单元格中的富文本&#xff0c;注意不是 xls&#xff0c;xls 的 api 不一样&#xff0c;试了很久没成功。只实现了解析 斜体字、上下标&#xff0c;其它的实现方式应该类似。 2. 具体实现 2.1 代码 package util;import java.io.FileInputStr…

嵌入式一开始该怎么学?学习单片机

学习单片机&#xff1a; 模电数电肯定必须的&#xff0c;玩单片机大概率这两门课都学过&#xff0c;学过微机原理更好。 直接看野火的文档&#xff0c;芯片手册&#xff0c;外设手册。 学单片机不要纠结于某个型号&#xff0c;我认为stm32就OK&#xff0c;主要是原理和感觉。…

【ZYNQ】Linux驱动之梦开始的地方

软件版本&#xff1a;Vivado2021.1 操作系统&#xff1a;WIN10 64bit、Ubuntu18.04 硬件平台&#xff1a;ZYNQ UltraScale 文章目录 1.1系统框图1.2介绍1.2.1寄存器查询手册1.2.2物理地址与虚拟地址1.2.3MIO介绍1.2.4PS的LED 引脚介绍 1.3搭建工程1.4程序分析1.4.1驱动程序分析…

edgeConnector新版兼容ARM-为用户提供更多部署方案

Softing工业自动化的edgeConnector产品新版3.50兼容ARM处理器——大大扩展了edgeConnector产品的应用范围。 &#xff08;edgeConnector新版兼容ARM——为用户提供更多部署方案&#xff09; Softing edgeConnector产品系列是基于Docker的软件应用&#xff0c;可访问SIMATIC S7、…