链表之第一回

在这里插入图片描述

欢迎来到我的:世界

收录专栏:链表

希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 !


目录

  • 前言
    • 第一题:删除链表的倒数第n个节点
    • 第二题:链表的中间结点
    • 第三题:合并两个排序的链表
  • 总结

前言

  • 在这里写的是有关链表的落坑题,详细写了我落坑的全过程,相信大家也都掉过坑,该专栏我会持续更新,感谢铁子们的支持。
    -———————对过程全力以赴,对结果淡然处之

第一题:删除链表的倒数第n个节点


地址: oj题地址


在这里插入图片描述

解题思路:

  • 1.暴力遍历:
    我们先遍历一遍,找到该链表中有多少个节点(第一次遍历),然后再第二次遍历找到倒数第n个节点,再进行删除,再返回原地址。这种方法可以说是这道题的比较简单的实现方法。再这里我想讲一下另一种方法:

  • 2.三指针法:
    先创造三个指针,tail指针,sur指针,dst指针,而sur,dst指针一开始指向是链表的起始地址,tail指针是指向sur指针前一个字节的地址,这就需要重新开辟一块空间其中的next 可以找到sur的地址;
    起始时物理图在这里插入图片描述
    注意:链表因为地址不是相连的,其地址可以看作是随机的,图中的地址都是我随便编的,只是为了方便更容易观察

  • 思路:先让dst指针向后走n个节点,这样的话,dst指针和sur指针就相距了n个节点,然后让这三个指针一起向后一次移动一个节点,直到dst指针指向空指针,这样的话,sur所指的就是倒数第n个节点(这一步观念很重要,一定要想清楚),这个时候有要删除的那个节点地址,也有该节点上一个节点的地址tail指针所指,那就可以很好的完成删除。
    以上的是思路,下面来进行实现

结束时的物理图:
在这里插入图片描述

struct ListNode* removeNthFromEnd(struct ListNode* head, int n ) {// write code here//sur指针是指向要删除的那个节点,dst是与sur保持间距n的,tail是sur前一个节点struct ListNode* sur = head, *dst = head;struct ListNode*tail =(struct ListNode*)malloc(sizeof(struct ListNode));tail->next=sur;//先让dst指针走n个节点while (n--) {dst = dst->next;}while (dst) {//三个指针一起出发,tail指针始终指向sur指针前前一个节点 dst = dst->next;sur = sur->next;tail = tail->next;}//删除if (head == sur) {//如果sur没动说明要删的就在第一个head = head->next;sur = head->next;} else {//要删的只要找到sur指针的前一个节点,就可以让sur后一个节点与之相连tail->next = sur->next;}return head;
}

第二题:链表的中间结点


地址:oj地址


在这里插入图片描述
解题思路:

  • 1.暴力遍历法:
    根据这道题的正常思路,肯定是先遍历一遍该链表的所有结点的个数,就可以得出中间点了,最后返回指向该点的地址;这种方法很寻常,在这里我就不具体讲了,我想具体讲下一种方法:
  • 2.快慢指针法:
    该方法思路是:先设置两个指针:slow,fast,分别是快慢指针,首先两个指针都是指向链表的起始位置,slow向下一个结点移动,而fast向下两个结点移动,直到fast指针停下,那fast指针什么时候停呢,肯定有不同情况,如果链表的结点时偶数时,这时fast 走到空为止,而如果链表总结点时奇数时,这时fast走到尾结点停下。
    ----如为奇数时:逻辑图:
    第一步:在这里插入图片描述
    第二步:
    在这里插入图片描述
    第三步
    在这里插入图片描述

若为偶数时:
逻辑图:
第一步:在这里插入图片描述
第二步:
在这里插入图片描述
第三步:
在这里插入图片描述
第四步:
在这里插入图片描述

代码:

struct ListNode* middleNode(struct ListNode* head ) {// write code here//设置快慢指针struct ListNode*sur=head,*dst=head;//当dst指针为空或dst指向的next为空就停下while(dst && dst->next){sur=sur->next;dst=dst->next->next;}return sur;
}

第三题:合并两个排序的链表


地址:oj地址


在这里插入图片描述
解题思路:

首先链表和顺序表不同,有些思路是行不通的;但也有其优点,链表是由一个一个结点连起来的,可以随时拆下来的;
用归并的方法,我们可以先创造两个指针,让需要归并的两组链表由起始位置进行比较,较小值尾插入一个指针,另一个指针是找到需要插入的前一个结点,好方便尾插;
在这里插入图片描述
比较1<2,尾插入 1 ,如果是第一次插入,应该先让head指针和tail指针同时指向 1 的地址;如果不是第一次插入,那就是应该pHead1的地址给tail->next,然后让tail指针指向tail->next,最后让pHead1指向下一个结点;
在这里插入图片描述

  • 然后是 2<3 ,尾插入2的地址;跟上面的步骤一样;
    注意:这里之后就不是第一次插入,记得让tail指针指向tail的下一个结点;

    在这里插入图片描述
    后面的步骤几乎是一样的;
    直到有一个链表没有了,在将剩下链表直接进行尾插入,就可以了;
    在这里插入图片描述
    在这里插入图片描述
    最后返回head指针;
    但是这就对了么?
    不是的,还有一步我们忘记了,如果两个链表其中一个是空,那这个程序的结果肯定报错,所以我们还要在最开始进行判断,如果有其中一个为空,则直接返回另一个链表;

代码:

struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {// write code here//如果其中一个链表为空,则直接返回另一个链表if(pHead1==NULL)return pHead2;if(pHead2==NULL)return pHead1;struct ListNode* head = NULL, *tail = NULL;//判断哪个链表先为空,就跳出去while (pHead1 && pHead2) {if (pHead1->val < pHead2->val) {if (tail == NULL) {//第一次尾插head = tail = pHead1;} else {//不是第一次尾插tail->next = pHead1;tail=tail->next;}//让篇pHead1指针找到下一个结点pHead1 = pHead1->next;} else {if (tail == NULL) {//第一次尾插head = tail = pHead2;} else {//不是第一次尾插tail->next = pHead2;tail=tail->next;}//让篇pHead2指针找到下一个结点pHead2 = pHead2->next;}}//判断哪个链表先为空,然后让另一个链表直接尾插入;
if(pHead1)tail->next=pHead1;if(pHead2)tail->next=pHead2;return head;
}

总结

在这里感谢老铁们的观看,在这里小孩谢谢大家的支持,以上的题目都是基于小孩现在的能力来说,如果还有更好的方法的老铁,可以在评论区里面一起进行讨论哦,在后面随着小孩的知识储备越多,小孩肯定还会加以优化优化!!


到了最后:
我还想告诉你:
------------对过程全力以赴,对结果淡然处之
也是对我自己讲的

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

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

相关文章

如何在 iOS 上安装并使用 ONLYOFFICE 文档

借助 iOS 版文档应用&#xff0c;您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件&#xff0c;查看和编辑现有文本文档、电子表格和演示文稿&#xff0c;创建新文档并对其进行整理&#xff0c;以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档&#xff0c…

数据结构-栈和队列

目录 栈的概念 栈的使用 ​编辑 模拟实现栈 中缀表达式转后缀表达式 括号匹配 出栈入栈次序匹配 队列概念 队列的使用 栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作.进行数据插入和删除操作的一端称为栈顶,;另一端称为栈底.栈中的数据…

【Vue-Router】嵌套路由

footer.vue <template><div><router-view></router-view><hr><h1>我是父路由</h1><div><router-link to"/user">Login</router-link><router-link to"/user/reg" style"margin-left…

动手学DL——MLP多层感知机【深度学习】【PyTorch】

文章目录 4、多层感知机&#xff08; MLP&#xff09;4.1、多层感知机4.1.1、隐层4.1.2、激活函数 σ 4.2、从零实现多层感知机4.3、简单实现多层感知机4.4、模型选择、欠拟合、过拟合4.5、权重衰退4.6、丢失法|暂退法&#xff08;Dropout&#xff09;4.6.1、dropout 函数实现4…

大数据--难点--地图的制作

地图一直是亮点也是难点&#xff0c;刚刚进公司的时候也很难懂~~做出来的也很难看 纯CSS3使用vw和vh视口单位实现h5页面自适应&#xff0c;gulp自动监听sass改动并保存到css中 当修改了sass里面的代码后&#xff0c;gulp会自动监听修改内容并同名保存到css文件夹中&#xff0…

C#字符串占位符替换

using System;namespace myprog {class test{static void Main(string[] args){string str1 string.Format("{0}今年{1}岁&#xff0c;身高{2}cm&#xff0c;月收入{3}元&#xff1b;", "小李", 23, 177, 5000);Console.WriteLine(str1);Console.ReadKey(…

02-C++数据类型-高级

数据类型-高级 4、复合类型 4.4、结构简介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…

B057-spring增强 依赖注入 AOP 代理模式 创建Bean

目录 AOP概念代理模式引出AOP实现方式xml方式实现注解方式实现 AOP 概念 事务管理&#xff1a;比如可以抽取try catch的重复代码 日志监控&#xff1a;比如业务逻辑前后打印关于当前订单数量的日志&#xff0c;了解业务做了什么 性能监控&#xff1a;比如业务前后打印时间&…

浪潮信息赵帅:多元算力时代 开源开放的OpenBMC成为服务器管理优先解

“多元算力时代下&#xff0c;大规模的异构服务器设备面临多种处理器架构、多种设备协议、不同管理芯片兼容的系统化设计挑战&#xff0c;管理固件也迎来新的变革。开源开放的OpenBMC&#xff0c;以创新的分层解耦软件架构&#xff0c;兼容不同处理器架构、算力平台和管理芯片&…

人流目标跟踪pyqt界面_v5_deepsort

直接上效果图 代码仓库和视频演示b站视频006期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; YOLOv5 DeepSORT介绍 YOLOv5 DeepSORT是一个结合了YOLOv5和DeepSORT算法的目标检测与多目标跟踪系统。让我为您详细解释一…

【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式

文章目录 1、字典学习与稀疏编码2、sklearn的实现3、示例 1、字典学习与稀疏编码 简单来说&#xff0c;稀疏编码就是把输入向量&#xff08;信号&#xff09;/ 矩阵&#xff08;图像&#xff09;表示为稀疏的系数向量和一组超完备基向量&#xff08;字典&#xff09;的线性组合…

ASP.NET WEB API通过SugarSql连接MySQL数据库

注意&#xff1a;VS2022企业版可以&#xff0c;社区版可能存在问题。实体名称和字段和数据库中的要一致。 1、创建项目&#xff0c;安装SqlSugarCore、Pomelo.EntityFrameworkCore.MySql插件 2、文件结构 2、appsettings.json { “Logging”: { “LogLevel”: { “Default”: …

搭建WebDAV服务手机ES文件浏览器远程访问

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件…

docker通用镜像方法,程序更新时不用重新构建镜像

docker通用镜像方法&#xff0c;程序更新时不用重新构建镜像。更新可执行文件后&#xff0c;重新启动容器就可运行。 功能 1、在demo目录下添加脚本文件start.sh&#xff0c;里面执行demo.jar文件。 2、将demo目录映射到镜像下的 /workspace目录。 3、Dockerfile文件中默认…

台湾shopee:虾皮电商平台选品方法与市场机遇

台湾Shopee虾皮电商平台为台湾本土卖家和消费者提供了一个线上交易平台。对于想要在台湾市场做虾皮电商的卖家来说&#xff0c;选择合适的产品是非常重要的。本文介绍一些做虾皮电商的选品方法和策略。 首先&#xff0c;了解市场需求是选品的基础。在进入台湾Shopee市场之前&a…

【Spring专题】Spring之Bean的生命周期源码解析——阶段二(IOC之实例化)

目录 前言阅读准备阅读指引阅读建议 课程内容一、SpringIOC之实例化1.1 简单回顾1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 AbstractBeanFactory#getMergedLocalBeanDefinition&#xff1a;合并BeanDefinition2.2 AbstractAutowireCapableBeanFactory#createBean&#xff…

安达发APS|APS排产软件之计划甘特图

在当今全球化和竞争激烈的市场环境下&#xff0c;制造业企业面临着巨大的压力&#xff0c;如何在保证产品质量、降低成本以及满足客户需求的同时&#xff0c;提高生产效率和竞争力成为企业需要迫切解决的问题。在这个背景下&#xff0c;生产计划的制定和执行显得尤为重要。然而…

2023年京东按摩仪行业数据分析(京东销售数据分析)

近年来&#xff0c;小家电行业凭借功能与颜值&#xff0c;取代黑电和白电&#xff0c;成为家电市场的主要增长点。在这一市场背景下&#xff0c;颜值更高、功能更丰富、品种更齐全的各类按摩仪&#xff0c;借助新消费和电子商务的风潮&#xff0c;陆续被推上市场。今年&#xf…

【Cocos Creator 项目实战 】消灭星星加强版(附带完整源码工程)

本文乃Siliphen原创&#xff0c;转载请注明出处 目录 概述 游戏整体流程 游戏框架设计 单一职责的类 主要流程控制类 核心玩法模块 UI&#xff1a; 游戏世界&#xff1a; 本文项目的代码组织结构 作者项目实践总结 场景只有一个入口脚本 尽量少在节点上挂载脚本 构…

从零构建深度学习推理框架-8 卷积算子实现

其实这一次课还蛮好理解的&#xff1a; 首先将kernel展平&#xff1a; for (uint32_t g 0; g < groups; g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k 0; k < k…