LeetCode 分类刷题:3217. 从链表中移除在数组中存在的节点

题目

给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除 所有存在于 nums 中的节点后,返回修改后的链表的头节点。

解析

对于本题,由于直接判断节点值是否在 nums 中,需要遍历 nums,时间复杂度为 O(n)。把 nums 中的元素保存一个哈希集合中,然后判断节点值是否在哈希集合中,这样可以做到 O(1)。

具体做法:

  1. 把 nums 中的元素保存到一个哈希集合中。
  2. 由于头节点可能会被删除,在头节点前面插入一个哨兵节点 dummy,以简化代码逻辑。
  3. 初始化 cur=dummy。
  4. 遍历链表,如果 cur 的下一个节点的值在哈希集合中,则需要删除,更新 cur.next 为 cur.next.next;否则不删除,更新 cur 为 cur.next。
  5. 循环结束后,返回 dummy.next。

作者:灵茶山艾府

链接:https://leetcode.cn/problems/delete-nodes-from-linked-list-present-in-array/solutions/2843071/shao-bing-jie-dian-yi-ci-bian-li-pythonj-imre/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

答案

javascript 复制代码
var modifiedList = function(nums, head) {
    const set = new Set(nums);
    const dummy = new ListNode(0, head);
    let cur = dummy;
    while (cur.next) {
        const nxt = cur.next;
        if (set.has(nxt.val)) {
            cur.next = nxt.next; // 从链表中删除 nxt 节点
        } else {
            cur = nxt; // 不删除 nxt,继续向后遍历链表
        }
    }
    return dummy.next;
};

// 作者:灵茶山艾府
// 链接:https://leetcode.cn/problems/delete-nodes-from-linked-list-present-in-array/solutions/2843071/shao-bing-jie-dian-yi-ci-bian-li-pythonj-imre/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

时间复杂度:O(n+m),其中 n 是 nums 的长度,m 是链表的长度。

空间复杂度:O(n)。

具体分析

  1. 创建 Setnew Set(nums) - 这是 O(n)

  2. 遍历链表while (cur.next) - 这是 O(m)

  3. Set 查询set.has(nxt.val) - 每次都是 O(1)

相关推荐
sparEE几秒前
基础排序算法:冒泡、选择、插入、希尔
数据结构·算法·排序算法
还是大剑师兰特7 分钟前
Vue3 Mixin 与 Vue2 Mixin 核心区别
前端·javascript·vue.js
188号安全攻城狮10 分钟前
【前端基础知识】JavaScript 数组方法总结:从表格速查到分类详解
开发语言·前端·javascript·网络安全
不爱吃炸鸡柳11 分钟前
5道经典贪心算法题详解:从入门到进阶
开发语言·数据结构·c++·算法·贪心算法
英俊潇洒美少年15 分钟前
迷你 React 调度器(带优先级+时间切片)手写实现
前端·javascript·react.js
米啦啦.20 分钟前
红黑树,,
数据结构·红黑树
xiaoye-duck26 分钟前
《算法题讲解指南:优选算法-队列+宽搜》--70.N叉树的层序遍历,71.二叉树的锯齿形层序遍历,72.二叉树的最大宽度,73.在每个树行中找最大值
数据结构·c++·算法·队列
代码改善世界27 分钟前
【C++初阶】双向循环链表:List底层结构的完整实现剖析
c++·链表·list
汀、人工智能28 分钟前
[特殊字符] 第98课:数据流中位数
数据结构·算法·数据库架构··数据流·数据流中位数
人道领域33 分钟前
【LeetCode刷题日记】:从 LeetCode 经典题看哈希表的场景化应用---数组、HashSet、HashMap 选型与算法实战
算法·leetcode·面试