数据结构和算法
链表
链表跟数组关系密切,首先你要理解数组是一块连续的内存地址,把数据放进去。但是他有个不好就是不适合去做增删改查,进行移除或增加操作时,往往非常繁琐,相当于要改变整个数组,因此呢!链表就应用而生,给在存放每一个数据,同时给这个数据指向它后一个数据(链表分为指针域和数据域),且不在是储存在一块连续的内存中,而是散乱分布的这样就为增删改查,提供了很大的便利性,删除数据只需要把指针跳过要删除的那位直接指向下一位(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
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22