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)

相关推荐
漫随流水14 小时前
leetcode算法(257.二叉树的所有路径)
数据结构·算法·leetcode·二叉树
有一个好名字14 小时前
力扣-二叉树的最大深度
算法·leetcode·深度优先
怕浪猫14 小时前
React从入门到出门第九章 资源加载新特性Suspense 原生协调原理与实战
javascript·react.js·前端框架
天问一14 小时前
Cesium 处理屏幕空间事件(鼠标点击、移动、滚轮)的示例
前端·javascript
MSTcheng.14 小时前
【算法】滑动窗口解决力扣『水果成篮』问题
算法·leetcode·哈希算法
bjzhang7514 小时前
使用 HTML + JavaScript 实现多会议室甘特视图管理系统
前端·javascript·html
qiqiliuwu14 小时前
VUE3+TS+ElementUI项目中监测页面滚动scroll事件以及滚动高度不生效问题的解决方案(window.addEventListener)
前端·javascript·elementui·typescript·vue
Renhao-Wan14 小时前
数据结构在Java后端开发与架构设计中的实战应用
java·开发语言·数据结构
天天向上102414 小时前
el-table 解决一渲染数据页面就卡死
前端·javascript·vue.js
bjzhang7514 小时前
使用 HTML + JavaScript 实现单会议室周日历管理系统
前端·javascript·html