【力扣】移除链表元素203

news2024/11/18 21:26:47

目录

  • 1.前言
  • 2. 题目描述
  • 3. 题目分析
    • 3.1 不带哨兵位
    • 3.2 带哨兵位
  • 4. 附代码
    • 4.1 不带哨兵位
    • 4.2 带哨兵位

1.前言

这里开始介绍从网上一些刷题网站上的题目,在这里做一些分享,和学习记录。
先来介绍一些力扣的OJ题目。
这里的OJ就是我们不需要写主函数,力扣会提供一个接口,在力扣中会调用我们所写的代码和它后台的匹配,从而判断我们写的代码正确性。

在力扣的题目中一般会给一些示例,就像这样:
在这里插入图片描述
当我们写完代码时可以点击运行,这时下面会出现一些测试用例,就像下面这样:
在这里插入图片描述
但是并不是给了运行成功就一定能成功,必须点击上面的提交,通过了才是真正的正确,就像下面这样:
在这里插入图片描述

2. 题目描述

在这里插入图片描述

3. 题目分析

这里题目明确指出需要返回的是新的链表,所以要返回一个新链表的头节点。
当我们没有任何思路时,可以先看看它给的示例,先进行一下分析。
在这里插入图片描述
要找到不是val值的节点,那么首先肯定要先遍历原来的链表,把不是的插入到新的链表中。

那首先就得先定义一个新的链表的头指针struct ListNode* newhead=NULL;为了方便实现插入,使用尾插,再定义一个新链表的尾指针方便插入struct ListNode* tail=NULL;接下来就需要原链表中找出不是val值的节点,然后尾插就行。

怎么找出不是val值的节点?
为了不使原链表中的头节点丢失,用定义一个cur指针代替,struct ListNode* cur=head;
用一个while循环,当cur为空时就结束,也就是cur已经把原链表遍历完了。

这里需要先考虑一下如果原链表为空,那就直接返回NULL就行。

在循环中怎么写找到val的代码?
那就先让cur往后走,当走到cur->val=val结束,所以这里插入的条件就是if(cur->val!=val),然后开始实现尾插。

3.1 不带哨兵位

这里还需要先判断一下新的链表是不是为空,如果为空,那就直接将cur=newhead,并且更新一下tail=cur;如果不为空,那就直接实现尾插。

        if(cur->val!=val)
        {
            if(newhead==NULL)
            {
                newhead=cur;
                tail=cur;
            }
            else
            {
                 tail->next=cur;
                 tail=tail->next;
            }

然后让cur继续往后遍历。
当找到原链表中节点值为val的节点是时,就删除:

struct ListNode* tmp=cur;
         cur=cur->next;
         free(tmp);

这里加一个尾指针的判断

if(tail)
    {
        tail->next=NULL;
    }

最后直接返回新节点的头指针。
在这里插入图片描述

3.2 带哨兵位

使用带哨兵位的新链表, newhead=tail=(struct ListNode*)malloc(sizeof(struct ListNode));就不需要判断新链表是否为空。
其它地方都与不带哨兵位一样,不过最后得把申请的哨兵位释放掉,返回的是哨兵位的后一个节点。

     struct ListNode* tmp=newhead;
     newhead=newhead->next;
     free(tmp);

    return newhead;  

在这里插入图片描述

4. 附代码

4.1 不带哨兵位


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

4.2 带哨兵位


struct ListNode* removeElements(struct ListNode* head, int val) {
   
    struct ListNode* newhead=NULL;
    struct ListNode* tail=NULL;
    struct ListNode* cur=head;

    newhead=tail=(struct ListNode*)malloc(sizeof(struct ListNode));

    while(cur)
    {
        if(cur->val!=val)
        {
             tail->next=cur;
             tail=tail->next;
             cur=cur->next;
        }
        else{
         struct ListNode* tmp=cur;
         cur=cur->next;
         free(tmp);
        }
        
    }
     tail->next=NULL;
    
     struct ListNode* tmp=newhead;
     newhead=newhead->next;
     free(tmp);

    return newhead;   
}

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

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

相关文章

SpringBoot的监控(Actuator) 功能

目录 0、官方文档 一、引入依赖 二、application.yml文件中开启监控 三、具体使用 四、具体细节使用 五、端点开启与禁用 六、定制Endpoint 1. 定制 /actuator/health 2. 定制 /actuator/info (1)直接在配置文件中写死 (2&#xff…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-ABC题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目A题题目-B题题目-C题题目-二.赛题题解A题题解-…

内存学习——堆(heap)

目录 一、概念二、自定义malloc函数三、Debug运行四、heap_4简单分析4.1 heap管理链表结构体4.2 堆初始化4.3 malloc使用4.4 free使用 一、概念 内存分为堆和栈两部分: 栈(Stack)是一种后进先出(LIFO)的数据结构&…

STM32-GPIO编程

一、GPIO 1.1 基本概念 GPIO(General-purpose input/output)通用输入输出接口 --GP 通用 --I input输入 --o output输出 通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,…

MATLAB离线附加功能包下载与安装教程

MATLAB离线附加功能包下载与安装教程 本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。 目录 MATLAB离线附加功能包下载与安装教程一、下载1. 获取MATLAB试用版账号2. 使用MATLAB Online搜索所需要的资源包3. 下载所需要的资源包二、安装由于不是…

【QED】井字棋

目录 题目背景题目描述输入格式输出格式测试样例 思路核心代码 题目背景 井字棋,英文名叫Tic-Tac-Toe,是一种在 3 3 3 \times 3 33格子上进行的连珠游戏,和五子棋类似。游戏时,由分别代表O和X的两名玩家轮流在棋盘格子里留下棋子…

uni-app 设置当前page界面进入直接变为横屏模式

首先 我们打开项目的 manifest.json 在左侧导航栏中找到 源码视图 然后找到 app-plus 配置 在下面加上 "orientation": [//竖屏正方向"portrait-primary",//竖屏反方向"portrait-secondary",//横屏正方向"landscape-primary",//横屏…

LIMoE:使用MoE学习多个模态

文章链接:Multimodal Contrastive Learning with LIMoE: the Language-Image Mixture of Experts 发表期刊(会议): NeurIPS 2022 目录 1.背景介绍稀疏模型 2.内容摘要Sparse Mixture-of-Experts ModelsContrastive LearningExperiment Analy…

JVM类加载器ClassLoader的源码分析

1、ClassLoader与现有类加载器的关系 ClassLoader与现有类加载器的关系: ClassLoader是一个抽象类。如果我们给定了一个类的二进制名称,类加载器应尝试去定位或生成构成定义类的数据。一种典型的策略是将给定的二进制名称转换为文件名,然后去…

VUEX使用总结

1、Store 使用 文件内容大概就是这三个。通俗来讲actions负责向后端获取数据的,内部执行异步操作分发 Action,调用commit提交一个 mutation。 mutations通过Action提交commit的数据进行提交荷载,使state有数据。 vuex的数据是共享的&#xf…

(三)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法(SWO、COA、LSO、GRO、LO)简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

Docker 安装Apache Superset 并实现汉化和快速入门

什么是Apache Superset Apache Superset是一个现代化的企业级商业智能Web应用程序。Apache Superset 支持用户的各种数据类型可视化和数据分析,支持简单图饼图到复杂的地理空间图表。Apache Superset 是一个轻量级、简单化、直观化、可配置的BI 框架。 Docker 安…

Mongodb 添加索引 优化记录

因 每晚12点20分定时任务做数据统计,mongodb 50万条数据开始,每天晚上CPU报警:CPU>95,并耗时3分钟以上. 2023-12-08 00:20:00.023 [Thread-95] INFO c.q.i.q.jobhandler.dataMongoDBXxlJob - 定时生成记录开始 ………… …………

每日一道c语言

任务描述 题目描述:输入10个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组 相关知识(略) 编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充&#xf…

二叉树查找值为x的结点(C语言)

目录 前言 查找值为x的结点 返回值为指针 返回值为布尔类型 整体代码 前言 在二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)中,我们解决了关于二叉树的部分问题,但是还有一个问题我们放在本篇解决。 …

04_W5500_TCP_Server

上一节我们完成了TCP_Client实验,这节使用W5500作为服务端与TCP客户端进行通信。 目录 1.W5500服务端要做的: 2.代码分析: 3.测试: 1.W5500服务端要做的: 服务端只需要打开socket,然后监听端口即可。 2…

二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)

目录 前言 分治算法 模拟二叉树代码 结点个数计算 错误方法 不便利方法 基于分治思想的方法 叶子结点个数 树的高度 第k层结点的个数 前言 在链式二叉树的前序、中序、后续遍历中我们模拟了一棵二叉树,并实现了它的前、中、后序遍历,现在我们来…

Leetcode—231.2的幂【简单】

2023每日刷题&#xff08;五十四&#xff09; Leetcode—231.2的幂 实现代码 class Solution { public:bool isPowerOfTwo(int n) {if(n < 0) {return false;}long long ans 1;while(ans < n) {ans * 2;}if(ans n) {return true;}return false;} };运行结果 之后我会…

Echarts饼图中显示百分比

开发中遇到一个需求&#xff0c;要在饼图上显示数据百分比&#xff0c;下图&#xff1a; 查了echarts 文档&#xff0c;并不能通过简单的配置来实现&#xff0c;原因如下&#xff1a;在单个serie的label中&#xff0c;只能设置一个label&#xff0c;位置可以选择在饼图内部inne…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司&#xff08;简称“兴业银行”&#xff09;成立于1988年8月&#xff0c;2022年总资产9.27万亿元&#xff0c;是经国务院、中国人民银行批准成立的首批股份制商业银行之一&#xff0c;总行设在福州市。现已发展成为横跨境内外&#xff0c;线上线下结合&…