链表oj测试题(上)

链表的申明:

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.rhkb.cn/news/283766.html

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

相关文章

【C++航海王:追寻罗杰的编程之路】stack

目录 1 -> stack的介绍和使用 1.1 -> stack的介绍 1.2 -> stack的使用 1.3 -> stack的模拟实现 1 -> stack的介绍和使用 1.1 -> stack的介绍 stack的文档介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中&#xff0c…

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

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

Java集合Collection之LinkedList

LinkeList LinkedList(双向链表)是一种常见的线性数据结构,但是并不会按线性的顺序存储数据。它由一系列节点组成,每个节点包含数据部分和一个指向下一个节点的引用。相比于数组,链表具有动态大小、插入和删除效率高的…

【计算机视觉】Gaussian Splatting源码解读补充(二)

第一部分 本文是对学习笔记之——3D Gaussian Splatting源码解读的补充,并订正了一些错误。 目录 三、相机相关scene/cameras.py:class Camera 四、前向传播(渲染):submodules/diff-gaussian-rasterization/cuda_rast…

ES进程除了kill之外,有什么优雅关闭的方式吗?

问题 Linux环境中,Elasticsearch 8的进程除了kill之外,有什么优雅关闭的方式吗? 具体实施方式 在Linux环境中,Elasticsearch(ES)进程可以通过多种方式实现优雅关闭,这种方式允许它完成必要的…

【Python音视频技术】玩AI视频创作引发写Python音视频技术系列文章1---视频添加字幕

最近对视频创作感兴趣, 详情见之前写的几篇文章。 【AI应用】模仿爆款视频二次创作短视频操作步骤 【人工智能】AI数字人视频演示 【人工智能】AI视频二次创作演示 作为程序员出身的我,看到一些功能, 我都有猎奇的习惯, 想着自己用什么技…

【技术栈】Spring Cache 简化 Redis 缓存使用

​ SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 ​ 本文封面由 凯楠📸 友情提供 目录 本栏传送门 1. Spring Cache 介绍 2. Spring Cache 常用注解 注:手机端浏览本文章…

Spark与flink计算引擎工作原理

Spark是大批量分布式计算引擎框架,scale语言开发的,核心技术是弹性分布式数据集(RDD)可以快速在内存中对数据集进行多次迭代,支持复杂的数据挖掘算法及图形计算算法,spark与Hadoop区别主要是spark多个作业之…

基于python+vue的stone音乐播放器的设计与实现flask-django-php-nodejs

随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,stone音乐播放器展现了其蓬勃生命力和广阔的前景。与此同时,为解决用…

Yocto学习笔记1-下载与首次编译

Yocto学习笔记1-下载与首次编译 1、基础环境介绍2、注意点3、安装依赖3.1 yocto常规系统构建所需依赖库(较全)3.2 龙芯适配时的最小依赖库(最小) 4、下载4.1 通过git克隆4.2 查看所有远程分支4.3 签出一个长期支持的稳定版本4.4 查…

工业相机采图方式、图像格式(BYTE、HObject和Mat)转换

1、概述 机器视觉项目中,如何采集到合适的图像是项目的第一步,也是最重要的一步,直接关系到后面图像处理算法及最终执行的结果。所以采用不同的工业相机成像以及如何转换成图像处理库所需要的格式成为项目开发中首先要考虑的问题。 2、工业…

微服务day05(中) -- ES索引库操作

索引库就类似数据库表,mapping映射就类似表的结构。 我们要向es中存储数据,必须先创建“库”和“表”。 2.1.mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,…

数据分析-Pandas序列滑动窗口配置参数

数据分析-Pandas序列滑动窗口配置参数 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&…

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

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

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动: EntitySet:DbContext包含…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中,可以通过多种方法来查看版本号。以下是几种常用的方法: 使用cat命令查看/etc/centos-release文件: CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容,从而获得C…

鸿蒙ArkTS实战开发-Native XComponent组件的使用

介绍 本篇Codelab主要介绍如何使用XComponent组件调用NAPI来创建EGL/GLES环境,实现在主页面绘制一个正方形,并可以改变正方形的颜色。本篇CodeLab使用Native C模板创建。 如图所示,点击绘制矩形按钮,XComponent组件绘制区域中渲…

递归和递推的区别

目录 1、递推 2、递归 3、结言 递归 递推 1、递推 递推就是说从初值出发后一直运算到所需的结果。 ——从已知到未知。(从小到大) 举一个简单的例子: 每天能学习一个小时的编程,那么一个月之后可以学到三十小时的编程知识。…

同义词的作用

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 同义词 同义词本质上属于近义词的概念,它是表、索引、视图等模式对象的一个别名 通过为模式对象创建同义词,可以隐藏对象的实际名称和所有者信息&a…

Linux安装Nacos

安装前必要准备 准备Java环境 ,8以上的版本,mysql(集群相关信息),nginx(进行代理) 安装Nacos 首先我们要有一个nacos的包,我们可以在线下载,也可以提前下载好&#xf…