【每日刷题】Day23

【每日刷题】Day23

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 138. 随机链表的复制 - 力扣(LeetCode)

2. 链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

3. 237. 删除链表中的节点 - 力扣(LeetCode)

1. 138. 随机链表的复制 - 力扣(LeetCode)

//这题对深拷贝不了解的需要先去了解一下,不然很难写这道题。

//思路:首先创建一个标准新链表,先不管random指针,就将原链表的val存入新链表。然后使用一个数组存储原链表每个节点的地址。随后处理random,遍历原链表的random,去数组中寻找,没找到就让新链表向后遍历一位,当找到时,新链表的指针也指向了random指向的地址。

typedef struct Node SN;


 

struct Node* copyRandomList(struct Node* head)

{

    if(!head)

    {

        return NULL;

    }

    SN* pmove = head;

    SN* pmove1 = head;

    SN* pnewhead = (SN*)malloc(sizeof(SN));

    SN* newmove = pnewhead;

    while(pmove)

    {

        SN* newnode = (SN*)malloc(sizeof(SN));

        newnode->next = NULL;

        newnode->val = pmove->val;

        newmove->next = newnode;

        pmove = pmove->next;

        newmove = newmove->next;

    }

    SN* newmove1 = pnewhead->next;

    SN* arr[2000];

    int i = 0;

    while(head)

    {

        arr[i++] = head;

        head = head->next;

    }

    SN* phead = newmove1;

    while(pmove1)

    {

        SN* pmove2 = phead;

        int j = 0;

        while(pmove1->random!=arr[j]&&pmove2)

        {

            pmove2 = pmove2->next;

            j++;

        }

        newmove1->random = pmove2;

        pmove1 = pmove1->next;

        newmove1 = newmove1->next;

    }

    return pnewhead->next;

}

2. 链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

//思路:得到链表的中间节点,将链表的后半段反转,再创建一个指向链表头节点的指针。指向链表中间节点的指针,两个指针同时走,比较val,val不相等直接返回false,都相等就返回true,只要有一个指针为NULL就停止循环。

class PalindromeList

{

public:

struct ListNode* FindMid(struct ListNode* A)//得到指向链表中间节点的指针

{

    struct ListNode* fast = A;

    struct ListNode* slow = A;

    while(fast&&fast->next)

    {

        fast = fast->next->next;

        slow = slow->next;

    }

    return slow;  

}

struct ListNode* reverseList(struct ListNode* head)//将链表后半段反转

{

    if(head==NULL||head->next==NULL)

    {

        return head;

    }

    struct ListNode* pf1 = NULL;

    struct ListNode* pf2 = head;

    struct ListNode* pf3 = pf2->next;

    while(pf2->next)

    {

        pf2->next = pf1;

        pf1 = pf2;

        pf2 = pf3;

        pf3 = pf3->next;

    }

    pf2->next = pf1;

    pf1 = pf2;

    return pf1;

}

    bool chkPalindrome(ListNode* A)

    {

        struct ListNode* mid = FindMid(A);//mid为指向链表中间节点的指针

        struct ListNode* cur = reverseList(mid);//传mid以反转后半段

        while(A&&cur)//循环逐个比较val

        {

            if(A->val!=cur->val)

            {

                return false;

            }

            A = A->next;

            cur = cur->next;

        }

        return true;

    }

};

3. 237. 删除链表中的节点 - 力扣(LeetCode)

//思路:创建新链表。这道题的难点在于无法使用头节点对链表进行访问,因此我们可以想到通过改变需要删除节点来达到删除的目的。这里我们创建一个新的链表,新的链表存储的是要删除节点后的数据,然后将要删除节点中的值改为新链表头节点的值,要删除节点的next指针的指向改为新链表的第二个节点。

typedef struct ListNode LN;

void deleteNode(struct ListNode* node)

{

    LN* pmove = node->next;//指向要删除节点的下一个节点

    LN* pnewhead = (LN*)malloc(sizeof(LN));//新链表的哨兵位

    LN* phead = pnewhead;

    while(pmove)//将要删除节点后面的节点中的值存入新链表

    {

        phead->next = pmove;

        pmove = pmove->next;

        phead = phead->next;

    }

    node->val = pnewhead->next->val;//将要删除节点的val改为新链表头节点的val

    node->next = pnewhead->next->next;next指针指向新链表的第二个节点

}

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

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

相关文章

MySQL从入门到高级 --- 2.DDL基本操作

文章目录 第二章:2.基本操作 - DDL2.1 数据库的常用操作创建数据库选择要操作的数据库删除数据库修改数据库编码 2.2 表结构的常用操作创建表格式查看当前数据库的所有表名称查看指定某个表的创建语句查看表结构删除表 2.3 修改表结构添加列修改列名和类型删除列修改…

python之excel加工处理小案例一则

一、工具用途 工作中,需要对各类excel进行加工处理,当表和字段比较多时,关联条件又有多个,每次通过execl的vlookup之类的关联公式手工可以解决工作需求,但一般耗时较长,且人工统计匹配也存在出错的情况。 …

cnpm安装

npm install -g cnpm --registryhttps://registry.npmmirror.com # 注册模块镜像 npm set registry https://registry.npmmirror.com // node-gyp 编译依赖的 node 源码镜像 npm set disturl https://npmmirror.com/dist // 清空缓存 npm cache clean --force // 安装c…

深入理解操作系统与计算机体系结构

文章目录 操作系统(Operator System)为什么要有操作系统操作系统是如何进行管理的为什么说操作系统是安全,稳定,高效的理解系统调用和库函数 操作系统(Operator System) 概念: 操作系统(Operating System,简称OS&…

一文整理完MySQL关系型数据库相关知识

MySQL关系型数据库 1. 介绍1.1 MySQL 2. 安装3. SQL语句4. SQL分类5. DDL5.1 库的DDL5.2 表、列的DDL 6. DML6.1 添加数据6.2 修改数据6.3 删除数据 7. DQL7.1 基础查询7.2 条件查询7.3 排序查询7.4 聚合函数7.5 分组查询7.6 分页查询 8. 约束8.1 约束分类 9. 多表查询9.1 内连…

Vue阶段练习:tab栏、进度条、购物车

阶段练习旨在学习完Vue 指令、计算属性、侦听器-CSDN博客后,进行自我检测,每个练习分为效果显示、需求分析、静态代码、完整代码、总结 四个部分,效果显示和准备代码已给出,我们需要完成“完整代码”部分。 目录 练习1&#xff1…

【经验分享】MySQL集群部署一:主从模式

目录 前言一、基本介绍1.1、概念1.2、执行流程 二、部署2.1、通用配置2.2、主节点配置2.3、从节点配置2.4、主从测试2.5、谈一谈主节点历史数据同步问题 前言 MySQL的部署模式常见的包括以下几种: 独立服务器部署主从复制部署高可用性集群(HA&#xff…

(mac)Promethues监控之mysqld_exporter(MySQL监控)

搭建Mysqld_exporterPrometheusGrafana监控系统 普罗米修斯是后端数据监控平台,通过Mysqld_exporter收集mysql数据,Grafana将数据用图形的方式展示出来 前提:已安装grafana和promethues 1.下载安装Mysql (1)启动MySQL…

基于51单片机的电梯仿真系统

基于51单片机的电梯设计 (仿真+程序PPT) 功能介绍 具体功能: 1.一共4层,数码管显示当前楼层; 2.六个按键模拟电梯外按键(1上、2上、2下、3上、3下、4下),每当按下时有…

循环单链表的介绍与操作

定义 区别 链表合并 整合代码 typedef struct node{int data;node* next;; }lnode,*linklist; lnode* n; linklist l;//定义 void init(linklist &l){lnode lnew lnode;l->nextl;lnode *rl; } //单循环链表的合并 linklist merge(linklist &a,linklist b){//存头结…

debian配置distcc分布式编译

前言 distcc 是一个用于在网络上的多台机器上分发 C、C、Objective C 或 Objective C 代码构建的程序。 distcc 应始终生成与本地构建相同的结果,易于安装和使用,并且通常比本地编译快得多。 distcc 不要求所有机器共享文件系统、同步时钟或安装相同的…

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表,用于存储元素,并且按照先进先出(First In First Out)的顺序进行管理,这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型:只允许在一端进行插入数据的操作&#xff0c…

HTTP、模块化

HTTP协议 包括请求行、请求头、请求体 http常见请求方法: url统一资源请求符,其本身也是一个字符串 响应体的内容格式是非常灵活的,常见的响应体格式有: 1.HTML 2.CSS 3. JavaScript 4.图片 5.视频 6.JSON 响应状态码: IP本身是一个数字…

20240427纳米多孔石墨烯力学性能的调控

文献来源:Tuning the mechanical properties of nanoporous graphene: a molecular dynamics study DOI:https://orcid.org/0000-0003-3598-5439 结论:在这项工作中,使用经典MD模拟分析了扶手椅和锯齿形的NPG(纳米多…

Ubuntu2004 CMake 使用基础

一、环境安装 win10安装wsl ubuntu2004 #windows c盘工程目录建立软链 ln -s /mnt/c /home/vrviu/ 安装cmake、c编译工具 apt install -y cmake g 二、CMakeLists.txt讲解 准备工作 首先,在/home/vrviu 目录建立一个 cmake 目录 以后我们所有的 cmake 练习都会放…

如何借模板助力小程序开发

不论是奶茶店还是其他行业,想要开发小程序,乔拓云都为你提供了便捷的方案。无需复杂的编程技术,通过套用模板的方式,即可快速打造专属小程序。 在线访问乔拓云官方网站,免费注册账号后,即可进入商城小程序的…

RabbitMQ知识点总结(一)

为什么要使用RabbitMQ? 异步,解耦,削峰。 异步 提高效率;一个挂了,另外的服务不受影响。 解耦 增加或减少服务比较方便。 削峰 每天0点到16点,A系统风平浪静,每秒并发数量就100个。结果每次到了16点到…

SecretFlow学习指南(2)学习路径

目录 一、模块架构 二、模块详解 三、算法协议 四、学习路线 一、模块架构 良好的分层设计可以提高开发效率和可维护性,满足不同用户的需求。隐语从上到下一共分为六层。 ●产品层:通过白屏化产品提供隐语整体隐私计算能力的输出,让用户简…

ZYNQ--PL读写PS端DDR数据

PL 和PS的高效交互是zynq 7000 soc开发的重中之重,我们常常需要将PL端的大量数 据实时送到PS端处理,或者将PS端处理结果实时送到PL端处理,常规我们会想到使用DMA 的方式来进行,但是各种协议非常麻烦,灵活性也比较差,本节课程讲解如何直接通过AXI总 线来读写PS端ddr的数据…

【Pytorch】(十三)模型部署: TorchScript

文章目录 (十三)模型部署: TorchScriptPytorch动态图的优缺点TorchScriptPytorch模型转换为TorchScripttorch.jit.tracetorch.jit.scripttrace和script的区别总结trace 和script 混合使用保存和加载模型 (十三)模型部署: TorchScr…