首页 > 编程语言 >数据结构与算法

数据结构与算法

时间:2023-08-02 23:01:10浏览次数:44  
标签:head cur val 元素 next 链表 算法 数据结构

链表

链表跟数组关系密切,首先你要理解数组是一块连续的内存地址,把数据放进去。但是他有个不好就是不适合去做增删改查,进行移除或增加操作时,往往非常繁琐,相当于要改变整个数组,因此呢!链表就应用而生,给在存放每一个数据,同时给这个数据指向它后一个数据(链表分为指针域和数据域),且不在是储存在一块连续的内存中,而是散乱分布的这样就为增删改查,提供了很大的便利性,删除数据只需要把指针跳过要删除的那位直接指向下一位(c++需要手动释放不然就是野指针,危害程序安全),操作就算是完成了。因此采用链表这种方式可以很好的适用于数据量不固定,频繁增删改查,较少查询的场景。

B站10分钟讲明白yyds [https://www.bilibili.com/video/BV1S64y1W7u5/?spm_id_from=333.880]

移除链表中的元素:

题意:删除链表中等于给定值 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 输出:[]

这道题的思路呢其实并不复杂,就是用指针链表去循环,去除给定的val值。同时要考虑一种特殊情况就是当第一个链表数据等于val时,按照一般循环逻辑就是当链表数据等于val时,找到当前元素的前一个元素的指针,将其指向当前链表元素的后一个。如此就实现了链表元素的删除,但当要删除的链表元素为val时,找不到第一个元素的前一个元素,因此删除无法实现。为此,我们引入一种特别的方式,在第一个链表元素的前面再加一个虚拟表头,以此来实现第一个元素的删除,这个虚拟表头不含任何真实数据,只充当一个占位符。思路上就是这么多,但写起来感觉还是很困难的,可能是第一次接触链表吧!

var removeElements = function(head, val) {
    const ret = new ListNode(0,head);
    let cur = ret;
    while(cur.next){
        if(cur.next.val === val){
            cur.next = cur.next.next;
            continue;
        }
        cur = cur.next;
    }
    return ret.next;

};

标签:head,cur,val,元素,next,链表,算法,数据结构
From: https://blog.51cto.com/Siri/6944203

相关文章

  • m基于大规模MIMO技术的5G网络上下行功率优化算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要         基于大规模MIMO技术的5G网络上下行功率优化算法"是针对5G网络中的大规模多输入多输出(MIMO)系统进行功率优化的一种算法。该算法旨在通过优化上行和下行通信的功率分配,以......
  • 基于蜉蝣优化算法实现聚类附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)
    实现该项目的流程如下"""项目:用户对物品类别的喜好细分(菜篮子分析)主算法:PCA降维算法KMeans算法总思路1、导包2、获取数据3、数据处理5、特征工程(使用PCA降维)6、使用KMeans算法进行模型训练7、模型评估""" Firstofall!!导包......
  • 算法-06-冒泡排序
       importrandomdefbubble_sort(li):foriinrange(len(li)-1):forjinrange(len(li)-i-1):ifli[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j]li=[random.randint(0,20)foriinrange(15)......
  • C语言数据结构学习资源
    我的代码仓库:efjN/DataStructure-码云-开源中国(gitee.com)学习方法:notion刷题模版:我的刷题记录https://beneficial-lyric-0ae.notion.site/leetcode-6b567423e5124303805770068f21692c?pvs=4学习网站:Hello算法(hello-algo.com)5星推荐代码随想录(programmercar......
  • 【C++数据结构】启航,打开新世界的大门!
    @TOC一、学习数据结构的原因学习数据结构对于计算机科学和软件开发非常重要,它提供了处理和组织数据的有效方法和技术。以下是几个学习数据结构的重要原因:提高问题解决能力:数据结构教会了我们如何选择和使用适当的数据结构来解决问题。了解各种数据结构的特性和性能可以帮助我们分......
  • 算法-05-排序
      ......
  • 算法笔记——ST表
    ST表ST表是一种简单的数据结构,主要用于解决RMQ问题(区间最大/最小值问题)主要应用倍增的思想,可以实现O(nlogn)预处理,O(1)查询1.预处理ST表倍增法递推:用两个等长的小区间拼凑一个大区间f[i][j]表示以第i个数为起点,长度为2^j的区间里的最大值/最小值f[i][j]=max(f[i][j-1],f[i+2^j-1]......
  • [算法题python]822.翻转卡片游戏
    在桌子上有 n 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。我们可以先翻转任意张卡片,然后选择其中一张卡片。如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。哪个数是这些想要的数字中最小的......
  • [算法题python]14. 最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 提示:......