【数据结构】LeetCode移除链表元素、反转链表、链表的中间结点

news2024/11/18 23:47:02

目录

          一、移除链表元素

                1、题目说明

                2、题目解析

          二、反转链表

                1、题目说明

                2、题目解析

          三、链表的中间结点

                1、题目说明

                2、题目解析

 


 

一、移除链表元素

  1、题目说明

题目链接:移除链表的元素

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

示例1:

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

输出:[1,2,3,4,5]

示例2:

输入:head = [ ] , val = 1

输出:[ ]

示例3:

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

输出:[ ] 

  2、题目解析

思路:这种方法是重新在定义一个新的链表,它有新的头指针和尾指针,将不等于 val 的元素链接到这个个新的链表上,就相当于我们实现链表的尾插,我们只需要遍历一遍链表,然后将不等于val的链接到一起,等于 val 时就跳过,然后释放旧的链表,最后再返回新的链表即可。

注意:在这里是分两种情况:(1)如果链表为空时,则直接返回就行;(2)如果链表不为空时,并且当不等于val时,第一次尾插的时候直接将旧链表的cur复制过去,如果不是第一次,就可以在后面链接了,如果等于val时,就将其删除。

struct ListNode* removeElements(struct ListNode* head, int val) 
{
    struct ListNode* cur = head;
    struct ListNode* newhead, * tail;
    newhead = tail = NULL;
    while (cur)
    {
        if (head == NULL)
            return;
        if (cur->val != val)
        {
            if (tail == NULL)
            {
                newhead = tail = cur;
            }
            else
            {
                tail->next = cur;
                tail = tail->next;
            }
            cur = cur->next;
        }
        else
        {
            struct ListNode* newnext = cur->next;
            free(cur);
            cur = newnext;
        }
    }
    //如果数组全部等于val时,就全部删掉,所以tail就为NULL了,所以要判断一下
    if (tail)
        tail->next = NULL;
    return newhead;
}

二、反转链表

  1、题目说明

题目链接:反转链表

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

 

  2、题目解析

 思路1:从第一个元素开始头插,这个就完成了我们的反转。

 

struct ListNode* reverseList(struct ListNode* head) 
{
    struct ListNode* cur = head;
    struct ListNode* rhead = NULL;
    while (cur)
    {
        struct ListNode* next = cur->next;
        //头插
        cur->next = rhead;
        rhead = cur;
        cur = next;
    }
    return rhead;
}

  思路2:直接反转链表的方向 。

struct ListNode* reverseList(struct ListNode* head)
{
    if (head == NULL)
        return NULL;
    struct ListNode* n1, * n2, * n3;
    n1 = NULL;
    n2 = head;
    n3 = n2->next;
    while (n2)
    {
        n2->next = n1;//反转
        n1 = n2;
        n2 = n3;
        if (n3)
            n3 = n3->next;
    }
    return n1;
}

三、链表的中间结点

  1、题目说明

 题目链接:链表的中间结点

给定一个头节点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

  2、题目解析

 这道题有种比较巧妙的解法,就是用快慢指针,一个快指针fast,一个慢指针slow,快指针走两步,慢指针走一步。当fast->next为NULL时,slow刚好走到中间位置。

 

 

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

 


 本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

 

   老铁们,记着点赞加关注!!! 

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

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

相关文章

蓝牙资讯|苹果获得智能戒指专利,可用于交互 AR / VR 头显设备

美国商标和专利局(USPTO)批准并公示了苹果的一项智能戒指专利。这款戒指主要作为苹果混合现实头显设备的辅助交互设备,但可以和 iPhone、iPad、AirPods、Mac 和其它设备一起使用。 苹果希望通过智能戒指来改善 AR / VR 世界的交互体验&…

工程项目管理系统源码-简洁+好用+全面-工程项目管理系统

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承…

javafx实现的工资管理系统

🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习…

ESP8266 SDK开发(ESP8266_RTOS_SDK 3.x)之AiThinkerIDE_V1.5.2安装、配置以及编写烧录一个程序

【本文发布于https://blog.csdn.net/Stack_/article/details/128509864,未经允许不得转载,转载须注明出处】 前言 乐鑫官方不搞IDE,安信可搞了IDE,但是各版本之间安装配置有差异,还没有文档说明。官方安装配置教程不完…

CTFHUB技能树-SSRF-redis协议踩坑

在gopherus上面输入命令:python gophers.py --exploit redis 将自动生成的代码url解密可以得到 如果是get传参需要再进行一次url编码 虽然蚁剑连接不上但可以用urlshell?cmdls / 获取flag 接下来看可以连接蚁剑的代码 文件名最好还是用shell.php 我测试了s.…

【C++初阶8-vector实现】没想的那么简单!

前言 本期带来vector实现,和以前的顺序表差别不大。 博主水平有限,不足之处望请斧正! 预备知识 实现参考SGI的stl30 我们看这种源码,要抓框架看:首先找类,看它的属性,再看方法 template &l…

全方位解析 C 端和 B 端的产品特性

近年来,互联网进入下半场,C 端流量红利逐渐消退,很多企业转向了 B 端服务,随之而来的是产品设计者的转型,现在越来越多的 C 端产品设计师开始涉足到 B 端产品的设计,这是一个知识迁移的过程,需要…

自动驾驶专题介绍 ———— 摄像头

文章目录介绍工作原理实现功能分类按通信协议区分按不同感光芯片按像元排列方式介绍 摄像头可以采集汽车周边的图像信息,跟人类的眼睛最为接近。摄像头可以拥有较广的视场角、较大的分辨率,还可以提供颜色和纹理等信息。这些信息对于实现自动驾驶功能是存…

Mentor-dft 学习笔记 day48-OCC With Capture Enable Clock Control Operation Modes

OCC With Capture Enable 有一个OCC具有capture_enable输入,可以与自由运行的慢速时钟一起使用。当OCC指定为启用捕获(capture_trigger:capture_en)时,在输入自由运行的慢时钟上添加时钟门控器,以从自由运行的时钟输…

影响宝宝大脑发育的6个坏习惯,你可能每天都在做

“望子成龙,望女成凤”这几乎是每个父母的愿望。虽然有一个高智商的天才宝宝太难了,但从不妨碍父母希望孩子更健康、更聪明。所以大家都比较关注宝宝的大脑发育,希望宝宝的大脑发育更好,长大后更聪明。但在日常生活中,…

android 12+从后台启动FGS限制

后台启动FGS限制 限制简介 以 Android 12(API 级别 31)或更高版本为目标平台的应用在后台运行时无法启动前台服务,少数特殊情况除外。 如果应用程序在后台运行时尝试启动前台服务,而前台服务不满足其中一种异常情况,系…

vue前端打包Docker镜像并nginx运行

首先说明咱们的前端项目是基于Vue的,反向代理使用的是nginx 1.打包vue前端项目生成dist文件夹上传至服务器 新建一个文件夹,叫vueDockerTest,下面的文件都需要。 cert是你存放ssl证书的文件夹,nginx.conf 是nginx的配置文件&am…

Kotlin 惰性集合操作-序列 Sequence

集合操作函数 和 序列 在了解 Kotlin 惰性集合之前,先看一下 Koltin 标注库中的一些集合操作函数。 定义一个数据模型 Person 和 Book 类: data class Person(val name: String, val age: Int) data class Book(val title: String, val authors: List…

jmeter 5.5+influxdb 2.0+grafana v9.3.2 - 压测看板setup

Docker set up 安装docker应用 https://docs.docker.com/desktop/install/mac-install/,在官网下载docker安装包,和安装其他的mac应用是一样的操作。 设置国内的镜像仓库(拉取镜像会快很多) {"registry-mirrors": [&q…

叠氮-聚乙二醇-羧酸;叠氮-单乙二醇-丙酸Azido-PEG1-acid;1393330-34-1小分子PEG衍生物

Azido-PEG1-acid 中文名称:叠氮-聚乙二醇-羧酸;叠氮-单乙二醇-丙酸 英文名称:Azido-PEG1-acid; 分子式:C5H9N3O3 分子量 :159.1 CAS:1393330-34-1 外观:粘稠液体或者固体粉末&#…

SHA和AES加密+GUI Swing写的一个本地运行和保存的密码管理小工具

目录效果项目结构功能1、登录2、加密3、解密4、列表代码1、先准备好两种加密方式的工具类SHAUtilAESUtil2、登录窗口3、主页窗口(加密和解密面板)4、主页窗口(列表面板)5、主程序(main)最后通过SHA和AES加密…

TestStand-序列步骤属性

文章目录GeneralRun OptionLoopingPost ActionSwitchingSynchronizationExpressionPreconditionsRequirementAdditional ResultPropertyCtrl-N创建一个新的Sequence,通过右键创建任意步骤 General Name -步骤的名称。 Type -步骤类型。一般不需要设置。 Adapter-适…

Android Kotlin之协程-异步流Flow的使用

数据流以协程为基础构建,与仅返回单个值的挂起函数相反,数据流可按顺序发出多个值。从概念上来讲,数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须相同。 数据流包含三个实体: 提供方会生成添加到数据流…

信息安全技术 政务信息共享 数据安全技术要求

声明 本文是学习GB-T 39477-2020 信息安全技术 政务信息共享 数据安全技术要求. 下载地址 http://github5.com/view/790而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 政务信息共享 数据安全 范围 本标准提出了政务信息共享数据安全要求技术框架&…

2023年工作第一天心情感悟

我是卢松松,点点上面的头像,欢迎关注我哦! 今天是2023年1月3日,也是我们上班的第一天。今天这篇随记,也发表下我对2023年的看法,也对过去的2022年做过总结。 (2023年元旦,到门头沟…