【LeetCode75】第二十九题 删除链表的中间节点

目录

题目:

示例;

分析:

代码:


题目:

示例;

分析:

给我们一个链表,让我们把链表中间的节点删了。

那么最直观最基础的办法是遍历两边链表,第一遍拿到链表长度,第二次把链表中间节点删了。

这个暴力做法我没事过,不过貌似是可以解决问题的,所以我觉得这题的难度不能算是中等。

那除了这个暴力解法,有没有其他办法解决问题呢,其实是有的。

我们之前每日一题有做过类似的链表题,是检测一个链表是否是环形链表。

【力扣每日一题】2023.7.29 环形链表_折途的博客-CSDN博客其实这是很经典的快慢指针题。我们需要定义两个指针来遍历这个链表,其中一个快指针比慢指针每次多走一次,如果快指针走到了链表末尾,那么就没有环。如果链表有环,那么因为快指针移动比慢指针多,因此他们最终会相遇,快慢指针相遇则表示链表有环。题目给我们一个链表,让我们判断这个链表是否有环。我们可以直接遍历这个链表,最后能走到链表末尾也就是空指针那就代表这个链表没有环,如果一直死循环在走,那么就说明我们陷入环了。当然,我们不可能这么做,不可能每次判断一个链表有概率让我们的程序陷入死循环,那么我们应该怎么做呢。https://blog.csdn.net/m0_63235356/article/details/131991214?spm=1001.2014.3001.5502然后我们用的方法是快慢指针,我们知道,快指针走的路是慢指针的两倍,因此如果快指针走到了链表末尾,那么慢指针所在的位置就是链表的正中间。

然后我们再将当前慢指针所指的节点删除即可。为了实现删除节点的效果,我们让慢指针的上一个节点的后驱指向慢指针的下一个节点,直接跳过慢指针就达到了删除指针的效果。

所以我们还要额外定义一个指针,用于记录慢指针的上一个节点。

代码:

class Solution {
public:ListNode* deleteMiddle(ListNode* head) {//定义快慢指针,快指针每次走两格,慢指针一次走一格ListNode* fast=head;ListNode* cur=head;ListNode* pre=nullptr;  //定义一个前驱节点,用于删除中间节点if(fast->next==nullptr) return pre;//快指针走到尽头则表示当前的慢指针在中间节点位置,开始删除while(fast!=nullptr &&fast->next!=nullptr){ fast=fast->next->next;pre=cur;cur=cur->next;}pre->next=cur->next;    //跳过前驱节点的下一个节点达到删除节点的效果.return head;      }
};

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

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

相关文章

Docker查看、创建、进入容器相关的命令

1.查看、创建、进入容器的指令 用-it指令创建出来的容器,创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器: exit查看现在正在运行的容器命令: docker ps查看历史容器&#xff0…

Uniapp当中使用腾讯位置路线规划插件保姆教学

首先我们在使用腾讯地图插件之前我们需要先做几点准备 1:我们需要在腾讯地图位置服务当中注册账号以及在控制台当中创建应用和创建key 这里在创建应用当中应用类型一定要选出行类型,否则后期可能会出现问题。 我们创建完应用之后,点击创建…

java毕业设计-智慧食堂管理系统-内容快览

首页 智慧食堂管理系统是一种可以提高食堂运营效率的管理系统。它将前端代码使用Vue实现,后端使用Spring Boot实现。这个系统的目的是简化食堂管理,提高食堂服务质量。在现代快节奏的生活中,人们对餐饮服务提出了更高的要求,食堂管…

论文复现--关于单视角动作捕捉工具箱--MMHuman3d的研究(基于Windows10和Linux18.04中配置)

分类:动作捕捉 github地址:https://github.com/open-mmlab/mmhuman3d 所需环境: Windows10,CUDA11.6,conda 4.13.0,Visual Studio 2017; Ubuntu18.04,conda22.9.0,CUDA11…

C语言题目的多种解法分享 2之字符串左旋和补充题

前言 有的时候,这个系列专栏中的解法之间并无优劣,只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释,方便大家直接找到对应的函数,只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢&#xff0…

Kafka3.0.0版本——Broker( 退役旧节点)示例

目录 一、服务器信息二、先启动4台zookeeper,再启动4台kafka三、通过PrettyZoo工具验证启动的kafka是否ok四、查看4台kafka集群节点上是否存在创建的名称为news的主题五、退役旧节点5.1、执行负载均衡操作5.2、 执行停止命令5.3、再次查看kafka中的创建过的名称为ne…

React Native 列表组件基础知识

ScrollView 组件 ScrollView组件是一个容器滚动组件,当容器超出指定宽高时就可以进行滚动交互。 ScrollView组件是一次性渲染所有的 React 子组件,这在性能上是比较差的,所以不建议当列表特别长的时候使用此组件。 接下来列举几个常用的一…

导入示例工程出现error: failed to start ability. Error while Launching activity错误的解决办法

导入华为健康生活应用(ArkTS),使用DevEco Studio打开,运行报错: error: failed to start ability. Error while Launching activity解决办法:修改module.json5里面exported的值,由false改为tr…

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形,可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

07 - 深入浅出HashMap的设计与优化

在上一讲中提到过 Collection 接口,那么在 Java 容器类中,除了这个接口之外,还定义了一个很重要的 Map 接口,主要用来存储键值对数据。 HashMap 作为我们日常使用最频繁的容器之一,相信你一定不陌生了。今天我们就从 …

做外贸发布产品的最简单的方式

最近和一个朋友聊天,说到他朋友在开某平台的网店,因为抄袭某家的好评而被投诉罚款,而被罚款的原因是这个朋友太懒了,在挑选了一家店铺的好评后,就直接照抄不误,而且全部的好评语都是抄自这同一家的&#xf…

IOS开发-XCode14介绍与入门

IOS开发-XCode14介绍与入门 1. XCODE14的小吐槽2. XCODE的功能bar一览3. XCODE项目配置一览4. XCODE更改DEBUG/RELEASE模式5. XCODE单元测试 1. XCODE14的小吐槽 iOS开发工具一直有个毛病,就是新版本的开发工具的总会有一些奇奇怪怪的bug。比如在我的Mac-Pro&#…

小红书如何打造爆款引流吸粉?11个秘诀助你秒变达人!

在这个充满信息和内容的时代,小红书以其独特的社交平台特性和个性化内容吸引了众多用户。今天,我们就来揭秘小红书关注战略,了解如何在这个平台上打造独特的内容体验,与用户建立更亲近的连接。#小红书# 1、定位清晰,找…

ChatGPT收录

VSCode插件-ChatGPT 多磨助手 多磨助手 (domore.run) Steamship Steamship 免费合集 免费chatGPT - Ant Design Pro 免费AI聊天室 (xyys.one)

职场中常用的项目管理软件盘点:了解这些选择

随着工作的深入,就会发现管理类软件在职场中真的很重要,比如项目管理软件。一个好用的项目管理软件能够让工作达到事半功倍的效果,就比如Zoho Projects项目管理软件,它不仅可以将项目内容进行细化,还有更多有利于团队协…

用 React+ts 实现无缝滚动的走马灯

一、走马灯的作用 走马灯是一种常见的网页交互组件,可以展示多张图片或者内容,通过自动播放或者手动切换的方式,让用户能够方便地浏览多张图片或者内容。 本次实现的不是轮播图而是像传送带一样的无限滚动的形式。 二、需求梳理 走马灯可设…

大数据:什么是数据分析及环境搭建

一、什么是数据分析 当今世界对信息技术的依赖程度在不断加深,每天都会有大量的数据产生,我们经常会感到数据越来越多,但是要从中发现有价值的信息却越来越难。这里所说的信息,可以理解为对数据集处理之后的结果,是从…

基于 ObjectOutputStream 实现 对象与二进制数据 的序列化和反序列化

目录 为什么要进行序列化呢? 如何实现 对象与二进制数据 的序列化和反序列化? 为什么要进行序列化呢? 主要是为了把一个对象(结构化的数据)转化成一个 字符串 / 字节数组,方便我们存储(有时候需…

软件测试工程师面试如何描述自动化测试是怎么实现的?

软件测试工程师面试的时候,但凡简历中有透露一点点自己会自动化测试的技能点的描述,都会被面试官问,那你结合你的测试项目说说自动化测试是怎么实现的?一到这里,很多网友,包括我的学生,也都一脸…

编写时源码优化插件试验品

我又来倒垃圾啦 自己垃圾桶里的这个:egg language server on VSCode | Framist’s Little House 用蛋消灭魔鬼!编写时源码优化插件 egg-language-server 🧪 in developing Source Code Optimization Tools at Writing-time 特性 demo | 点击跳…