• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据结构和算法

武飞扬头像
不高兴就骂人
帮助1

链表

链表跟数组关系密切,首先你要理解数组是一块连续的内存地址,把数据放进去。但是他有个不好就是不适合去做增删改查,进行移除或增加操作时,往往非常繁琐,相当于要改变整个数组,因此呢!链表就应用而生,给在存放每一个数据,同时给这个数据指向它后一个数据(链表分为指针域和数据域),且不在是储存在一块连续的内存中,而是散乱分布的这样就为增删改查,提供了很大的便利性,删除数据只需要把指针跳过要删除的那位直接指向下一位(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;

};

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiaeakb
系列文章
更多 icon
同类精品
更多 icon
继续加载