链表oj测试题(上)

news2024/9/24 21:26:40

链表的申明:

struct ListNode
{
	int val;
	struct ListNode* next;
};

1.题1

删除指定元素  例如:链表1 2 6 3 4 5 6,然后选择删除元素6,返回的链表为1 2 3 4 5 。

代码演示:

typedef struct ListNode ListNode;
 ListNode* removeElements(ListNode* head, int val)
{
	 ListNode* newHead, * newTail;
	 newHead = newTail = NULL;
	 ListNode* pcur = head;
	 while (pcur)
	 {
		 if (pcur->val != val)//不是val就插入新链表
		 {
			 if (newHead == NULL)
			 {
				 newHead = newTail = pcur;//空链表就将头节点和尾节点都指向pcur
			 }
			 else//链表不为空
			 {
				 newTail->next = pcur;
				 newTail = newTail->next;
			 }
          
		 }
		 pcur = pcur->next;

	 }
	 if (newTail)//判断最后的尾节点是否为NULL,如果为NULL的话就为对其去指针域就会报错
	 {
		 newTail->next = NULL;
	 }
	 return newHead;
}

在这里的思路就是遍历原链表碰到不为val的数就尾插到新创建的链表,最后将新链表的头返回来,大家也可以试试将它们的上一个节点的地址保存val下一个节点的地址,然后再将val的空间释放掉,这个方法虽然有些麻烦,但是大家可以练习一下思维。

在这里我们我们要用到尾插的代码,和创建节点才能创建好链表,虽然可以不包装成函数,但是如果将其包装成函数的话可以减少下次需要使用到它的时候,减轻代码量。

尾插:

void InsertBack(ListNode**phead,int val)
{
 assert(phead);
 ListNode* newNode = GetNode(val);
 if (*phead == NULL)
 {
	 *phead = newNode;
	 return;
 }

 ListNode* ptail = *phead;
 while (ptail->next)
 {
	 ptail = ptail->next;
 }
 ptail ->next= newNode;
}

创建节点:

ListNode* GetNode(int val)
{
 ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
 assert(newNode);
 newNode->val = val;
 newNode->next = NULL;
 return newNode;
}

我们可以测试一下代码是否可以达到预想效果:

2.题2 

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

代码演示:

ListNode* middleNode(ListNode* phead)
{
 ListNode* slow, * fast;
 slow = fast = phead;
 while (fast && fast->next)//当fast或者fast->next其中一个为空就跳出循环,此时slow刚好指向中节点。
 {//判断式的顺序不能替换,因为当fast为空时,结果fast->在前面这就导致了对空指针的引用,会报错。
	 slow = slow->next;//每次走一步
	 fast = fast->next->next;//每次走两步
 }
 return slow;
}

我们在这里用到的是快慢指针法,这个方法就是创建两个指针变量,然后快指针一次走两步,慢指针一次走一步,当快指针为NULL,或者慢指针next为NULL,循环停止,慢指针的位置就是中间节点的位置·。

我们来测试一下:

 大家一起加油!

谢谢

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

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

相关文章

01-java面试题八股文-----java基础——20题

文章目录 <font color"red">1、java语言有哪些特点&#xff1a;<font color"red">2、面向对象和面向过程的区别<font color"red">3、标识符的命名规则。<font color"red">4、八种基本数据类型的大小&#xff…

Elastic 线下 Meetup 将于 2024 年 3 月 30 号在武汉举办

2024 Elastic Meetup 武汉站活动&#xff0c;由 Elastic、腾讯、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 活动时间 2024年3月30日 13:30-18:00 活动地点 中国武汉 武汉市江夏区腾讯大道1号腾讯武汉研发中心一楼多功能厅 13:30-14:00 入场 活动流程…

关于调度算法,小林给出更好的例子(银行办理业务)

看的迷迷糊糊&#xff1f;那我拿去银行办业务的例子&#xff0c;把上面的调度算法串起来&#xff0c;你还不懂&#xff0c;你锤我&#xff01; 办理业务的客户相当于进程&#xff0c;银行窗口工作人员相当于 CPU。 现在&#xff0c;假设这个银行只有一个窗口&#xff08;单核 …

Prometheus Grafana 配置仪表板

#grafana# 其实grafana提供了丰富的Prometheus数据源的仪表板&#xff0c;基本上主流的都有&#xff0c;通过下面官方地址可查阅 Dashboards | Grafana Labs 这里举例说明&#xff0c;配置node_exporter仪表板 首先&#xff0c;在上面的网站搜索 node 可以查到蛮多的仪表板…

使用 Pytorch 和 Rasterio 的自定义地理空间数据加载器

地理空间数据在从遥感和城市规划到环境监测和灾害管理的各个领域发挥着至关重要的作用。在处理机器学习任务的地理空间数据时,准备自定义数据加载器对于有效加载、预处理和增强数据而不丢失其属性至关重要,特别是当输入图像具有超过 3 个波段时。 Rasterio确实是一个专门为有…

FPGA——DDR3的IP核

FPGA——DDR3的ip核 IP核配置基于MIG核代码基于AXI接口的DDR3 IP核配置 1 2 3 4 5 6 基于MIG核代码 控制MIG核的信号进行读写 module MIG_APP_Drive(input i_ui_clk ,input i_ui_rst ,input init_calib_…

SpringCloud Alibaba Nacos 服务注册和配置中心

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十二篇&#xff0c;即介绍 SpringCloud Alibaba Nacos 服务注册和配置中心。 二、Nacos 简介 2.1 为…

【DataWhale】灵境Agent开发——低代码创建AI智能体

灵境Agent开发——低代码创建AI智能体 3 灵境 Agent 低代码开发 ​ 低代码模式支持开发者通过编排工作流的方式快速构建智能体&#xff0c;您可以通过拖拽和组合模型、提示词、代码等模块&#xff0c;实现准确的、复杂的业务流程。 ​ 个人体验下来&#xff0c;目前这个低代…

华为OD机22道试题

华为OD机试题 2.查找小朋友的好朋友位置 在学校中&#xff0c;N 个小朋友站成一队&#xff0c;第 i 个小朋友的身高为 height[i]&#xff0c;第 i 个小朋友可以看到第一个比自己身高更高的小朋友j&#xff0c;那么 j 是 i 的好朋友 (要求&#xff1a;j>i) 。 请重新生成一个…

[运维] 可视化爬虫易采集-EasySpider(笔记)

一、下载 ​下载地址 下滑到Assets页面&#xff0c;选择下载 二、解压运 ​解压压缩包&#xff0c;打开文件夹 在此文件夹下打开Linux Terimal, 并输入以下命令运行软件&#xff1a; ./easy-spider.sh 注意软件运行过程中不要关闭terminal。 三、使用 1.开始 首先点击…

机器学习算法那些事 | 数据算法工程师必须掌握的5个Python库

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;数据算法工程师必须掌握的5个Python库 如果你是一名初学者或中级机器学习工程师或数据科学家&#xff0c;这篇文章非常适合你。你已经选择了自…

【C语言】动态内存分配

1、为什么要有动态内存分配 不管是C还是C中都会大量的使用&#xff0c;使用C/C实现数据结构的时候&#xff0c;也会使用动态内存管理。 我们已经掌握的内存开辟方式有&#xff1a; int val 20; //在栈空间上开辟四个字节 char arr[10] { 0 }; //在栈空间…

[SAP ABAP] SE11查询数据库表中的数据

我们可以通过事务码SE11查询对应数据库表中的详细数据 本次查询使用的数据库表名为MARA&#xff0c;具体操作如下所示: ① 输入事务码SE11进入ABAP字典操作界面&#xff0c;在数据库表搜索框中输入目标表名MARA&#xff0c;并点击【显示】按钮 ② 进入到显示表界面&#xff0…

阿里云服务器租用一年多少钱?2024年最新阿里云租用价格

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

HarmonyOS NEXT应用开发—使用绘制组件实现自定义进度动画

介绍 本示例介绍使用绘制组件中的Circle组件以及Path组件实现实时进度效果。该场景多用于手机电池电量、汽车油量、水位变化等动态变化中。 效果预览图 使用说明 加载完成后初始显示进度为0%&#xff0c;颜色为红色&#xff0c;且有充电、放电两个按钮。点击充电按钮&#x…

C++中的std::for_each并行执行探索

在C标准库中&#xff0c;std::for_each是一个用于遍历容器或可迭代序列并对每个元素执行特定操作的强大工具。传统的std::for_each是顺序执行的&#xff0c;即它会按照元素在序列中的顺序&#xff0c;逐个应用函数对象或lambda表达式。然而&#xff0c;随着多线程编程的普及和硬…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后&#xff0c;手表体验更进一步&#xff0c;快来看看有哪些变化吧~

Vue2(八):TodoList案例

一、整体思路 1.分析结构 我们对大盒子拆分&#xff0c;分成header、list、footer&#xff0c;但是list最好也进行拆分&#xff0c;因为它里面的每个小盒子结构一样就是字不一样&#xff0c;可以用一个组件多次调用完成&#xff0c;所以分成app>header、list、footer>i…

Stability AI发布Stable Video 3D模型:可从单张图像创建多视图3D视频,视频扩散模型史诗级提升!

Stability AI发布了Stable Video 3D (SV3D)&#xff0c;这是一种基于稳定视频扩散的生成模型&#xff0c;推动了3D技术领域的发展&#xff0c;并大大提高了质量和视图一致性。 该版本有两个版本: SV3D_u:该变体基于单图像输入生成轨道视频&#xff0c;无需相机调节。 SV3D_p:扩…

yolov6实现遥感影像目标识别|以DIOR数据集为例

1 目标检测是计算机视觉领域中的一项重要任务&#xff0c;它的目标是在图像或视频中检测出物体的位置和类别。YOLO&#xff08;You Only Look Once&#xff09;是一系列经典的目标检测算法&#xff0c;最初由Joseph Redmon等人于2016年提出。YOLO算法具有快速、简单、端到端的特…