当前位置: 首页 > news >正文

【C语言】刷题|链表|双指针|指针|多指针|数据结构

主页:114514的代码大冒

qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ )

Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com

文章目录

目录

文章目录

前言

一、移除链表元素

二、反转链表

 三,链表的中间结点

四,剑指 Offer 22. 链表中倒数第k个节点

 五,合并两个有序链表

总结



前言

祝武运昌隆!!!


一、移除链表元素

描述:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例一:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例二:

输入:head = [], val = 1
输出:[]

示例三:

输入:head = [7,7,7,7], val = 7
输出:[]

思路:

这个题目我们因为涉及单链表的节点删除操作,所以我们要知道需要删除的节点的前一个节点的位置,这样才能完成删除操作,所以我们设置了两个指针,一个prev表示前一个位置,一个cur表示当前节点位置,ok,我们接下来看解析图(注意边界问题,诸如单节点,空链表的处理)

如图:

 上图把链表结构画成了数组,将就着看吧

 代码:

struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode* prev = NULL;struct ListNode* cur = head;if(head == NULL){return NULL;}while(cur != NULL){if(cur->val != val){prev = cur;cur = cur->next;}else{if (prev == NULL){head = head->next;free(cur);cur = head;}else{prev->next = cur->next;free(cur);cur = prev->next;}}}return head;
}

二、反转链表

描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例一:

 

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例二:

输入:head = [1,2]
输出:[2,1]

 

示例三:

输入:head = []
输出:[]

思路:

我们这题的基本题意就是让第一个节点指向空,第二个节点指向第一个节点,第三个节点指向第二个节点,以此类推,最后,本来的尾节点成了头结点,这题是个经典题目,很多的公司在面试的时候都喜欢出这么一个类型的题目,在这里,我们对于本题采用多指针的办法(分别为prev,cur,next),OKOK,我们直接上图:

 代码:

struct ListNode* reverseList(struct ListNode* head){struct ListNode* cur = head;if(cur == NULL){return NULL;}struct ListNode* prev = NULL;struct ListNode* next = cur->next;if(cur->next == NULL){return cur;}while(cur){cur->next = prev;prev = cur;cur = next;if(next != NULL)next = cur->next;}return prev;}

 三,链表的中间结点

描述:

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例一:

输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例二:

输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

 

思路:

设置快慢指针,快指针的速度是慢指针的二倍,也就是说在快指针指向链尾时,慢指针就会指向链的中间位置,这里对于奇数个节点与偶数个节点的处理方式是不一样的,涉及到边界为问题,我们具体通过画图来分析:

 代码:

struct ListNode* middleNode(struct ListNode* head){struct ListNode* fast = head;struct ListNode* slow = head;if(head == NULL){return NULL;}if(head->next == NULL ){return head;}while(fast && fast->next ){fast = fast->next->next;slow = slow->next;}return slow;}

四,剑指 Offer 22. 链表中倒数第k个节点

描述:

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

示例一:

给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.

思路:

设置快慢指针,快指针提前走k步,然后快慢指针同时逐节点前进,走到链尾,慢指针指向的就是倒数第k个节点,此题奇数偶数不影响,如图所示:

代码:

struct ListNode* getKthFromEnd(struct ListNode* head, int k){struct ListNode* hd = head;struct ListNode* fast = head;struct ListNode* slow = head;if(head == NULL){return NULL;}while(k--){fast = fast->next;if(fast == NULL){break;}}while(fast){fast = fast->next;slow = slow->next;}return slow;
}

 五,合并两个有序链表

 描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

 示例一:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例二:

输入:l1 = [], l2 = []
输出:[]

示例三:

输入:l1 = [], l2 = [0]
输出:[0]

思路:

我们自己弄一个头结点,然后将这两个链表逐个节点比较,小的就连在新的头结点后面,以此类推

如此就完成了对链表的合并,函数返回的应当是我们弄的头结点的下一个节点

如图:

 代码:
 

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* rethead = head;struct ListNode* l1 = list1;struct ListNode* l2 = list2;if((l1 == NULL)&&(l2 == NULL)){return NULL;}while(l1 && l2){if(l1->val > l2->val){head->next = l2;head = head->next;l2 = l2->next;}else{head->next = l1;head = head->next;l1 = l1->next;}}if(l1 != NULL){head->next = l1;}else if(l2 != NULL){head->next = l2;}else{;}return rethead->next;}


总结

OK,这就是本次链表的全部内容了,链表题在数据结构中真的属于比较简单的部分了,大家手撕红黑树的闲暇之余,可以随便找几个链表题放松放松

相关文章:

【C语言】刷题|链表|双指针|指针|多指针|数据结构

主页:114514的代码大冒 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、移除链表元素 二、反转链表 三,链表的中间结点 四&…...

糖化学类854262-01-4,Propargyl α-D-Mannopyranoside,炔丙基 α-D-吡喃甘露糖苷

外观以及性质:Propargyl α-D-Mannopyranoside一般为白色粉末状,糖化学类产品比较多,一般包括:葡萄糖衍生物、葡萄糖醛酸衍生物,氨基甘露糖衍生物、半乳糖衍生物、氨基半乳糖衍生物、核糖衍生物、阿拉伯糖衍生物、唾液…...

项目管理工具DHTMLX 在 G2 排名中再创新高

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…...

28 位委员出席,龙蜥社区第 15 次运营委员会会议顺利召开

2 月 24 日,龙蜥社区在海光召开了第 15 次运营委员会会议,本次会议由统信软件运营委员会委员崔开主持。来自 Arm、阿里云、飞腾、红旗软件、海光、Intel、龙芯、联通软研院、浪潮信息、普华基础软件、统信软件、万里红、移动、中科方德等理事单位的 28 位…...

自然语言处理-基于预训练模型的方法-chapter3基础工具集与常用数据集

文章目录3.1NLTK工具集3.1.1常用语料库和词典资源3.1.2常见自然语言处理工具集3.2LTP工具集3.3pytorch基础3.3.1张量基本概念3.3.2张量基本运算3.3.3自动微分3.3.4调整张量形状3.3.5广播机制3.3.6索引与切片3.3.7降维与升维3.4大规模预训练模型3.1NLTK工具集 3.1.1常用语料库和…...

【SpringMVC】@RequestMapping

RequestMapping注解 1、RequestMapping注解的功能 从注解名称上我们可以看到,RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处…...

【深度学习】BERT变体—SpanBERT

SpanBERT出自Facebook,就是在BERT的基础上,针对预测spans of text的任务,在预训练阶段做了特定的优化,它可以用于span-based pretraining。这里的Span翻译为“片段”,表示一片连续的单词。SpanBERT最常用于需要预测文本…...

根据身高体重计算某个人的BMI值--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例3&#xff1a;根据身高体重计算某个人的BMI值 BMI又称为身体质量指数&#xff0c;它是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。我国制定的BMI的分类标准如表1所示。 表1 BMI的分类 BMI 分类 <18.5 过轻 18.5 < BMI < 23.9 正常 24 < BM…...

高并发编程JUC之进程与线程高并发编程JUC之进程与线程

1.准备 pom.xml 依赖如下&#xff1a; <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target&g…...

css基础

1-css引入方式内嵌式style&#xff08;学习&#xff09;<style>p {height: 200;}</style>外联式link&#xff08;实际开发&#xff09;<link rel"stylesheet" href"./2-my.css">2-选择器2.1标签选择器&#xff08;标签名相同的都生效&am…...

Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

文章目录环境原因解决CSharp 脚本效果预览 - Light.shadowCustomResolution效果预览 - Using Quality Settings应用ControlLightShadowResolution.cs ComponentTools Batching add the Component to all LightReferences环境 Unity : 2020.3.37f1 Pipeline : BRP 原因 (好久没…...

如何在SSMS中生成和保存估计或实际执行计划

在引擎数据库执行查询时执行的过程的步骤由称为查询计划的一组指令描述。​查询计划在SQL Server中也称为SQL Server执行计划,我们可以通过以下步骤来生成和保存估计或实际执行计划。 估计执行计划和实际执行计划是两种执行计划: 实际执行计划:当执行查询时,实际执行计划出…...

mac 环境下安装MongoDB

目录 一、下载MongoDB数据库并进行安装 二. 解压放在/usr/local目录下 三. 配置环境变量 “无法验证开发者”的解决方法 mongodb可视化工具的安装与使用 一、下载MongoDB数据库并进行安装 下载地址&#xff1a;https://www.mongodb.com/try/download/community 二. 解压…...

RTOS中相对延时和绝对延时的区别

相信许多朋友都有过这么一个需求&#xff1a;固定一个时间&#xff08;周期&#xff09;去处理某一件事情。 比如&#xff1a;固定间隔10ms去采集传感器的数据&#xff0c;然后通过一种算法计算出一个结果&#xff0c;最后通过指令发送出去。 你会通过什么方式解决呢&#xf…...

Solon2 项目整合 Nacos 配置中心

网上关于 Nacos 的使用介绍已经很多了&#xff0c;尤其是与 SpringBoot 的整合使用。怎么安装也跳过了&#xff0c;主要就讲 Nacos 在 Solon 里的使用&#xff0c;这个网上几乎是没有的。 1、认识 Solon Solon 一个高效的应用开发框架&#xff1a;更快、更小、更简单&#xf…...

Linux 路由表说明

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录route 命令字段分…...

MIPI协议

MIPI调试指南Rev.0.1 June 18, 2019 © 2018 Horizon Robotics. All rights reserved.Revision HistoryThissection tracks the significant documentation changes that occur fromrelease-to-release. The following table lists the technical content changes foreach …...

第十届CCF大数据与计算智能大赛总决赛暨颁奖典礼在苏州吴江顺利举办

2月24日-25日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;主办、苏州市吴江区人民政府支持&#xff0c;苏州市吴江区工信局、吴江区东太湖度假区管理办公室、苏州市吴江区科技局、CCF大数据专家委员会、CCF自然语言处理专业委员会、CCF高性能计算专业委员会、CCF计算…...

PMP高分上岸人士的备考心得,分享考试中你还不知道的小秘密

上岸其实也不是什么特别难的事情&#xff0c;考试一共就180道选择题&#xff0c;题目只要答对60.57%就可以通过考试&#xff0c;高分通过没在怕的&#xff0c;加油备考呀朋友们&#xff01; 这里也提一嘴&#xff0c;大家备考的时候比较顾虑的一个问题就是考试究竟要不要报班…...

ubuntu下编译libpq和libpqxx库

ubuntu下编译libpq和libpqxx库&#xff0c;用于链接人大金仓 上篇文章验证了libpqxx可以链接人大金仓数据库&#xff0c;这篇文章尝试自己编译libpq和libpqxx库。 文章目录ubuntu下编译libpq和libpqxx库&#xff0c;用于链接人大金仓libpq下载libpq库看看有没有libpq库编译lib…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...