算法题解-移除链表中的元素

简介: 算法题解-移除链表中的元素

题目


给一个链表的头节点 head 和一个整数 val ,请删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

输入: head = [1,2,6,3,4,5,6], val = 6
输出: [1,2,3,4,5]


题解


第一种


首先我们在函数中先判断head是否为空,如果为空那么我们直接返回head,然后我们判断头节点的下一个节点是否为空,如果是那么我们判断该节点的值是否等于val,如果相等则说明需要移除该节点,我们将head指向head.next,我们返回更新后的head即可,如果链表中有多个节点,那么我们先声明一个point的变量,将其指向head节点,point变量将被用于遍历链表,然后我们使用while循环,循环条件为point.next是否存在,在循环中,我们先判断point.next节点的值是否等于val,如果相等则说明找到了要移除的节点,我们直接将point.next节点的下一个节点赋值给point.next,继续遍历链表,当循环结束后,我们判断当前head不为空且head的值等于val,如果是我们则将head指向head.next,最后我们将head返回出去即可

var removeElements = function (head, val) {
    if (!head) return head;
    if (head.next === null) {
        if (head.val === val) {
            head = head.next;
        }
        return head;
    }
    let point = head;
    while (point.next) {
        if (point.next.val === val) {
            point.next = point.next.next;
        } else {
            point = point.next;
        }
    }
    if(head && head.val === val){
        head = head.next;
    }
    return head;
};


第二种


我们在函数中声明了一个ret的新节点,它的值为0,并将head节点作为其下一个节点,然后我们声明了一个名为cur的变量,默认指向ret节点,cur变量用于遍历链表,然后我们使用while循环,循环条件为cur.next,只要cur节点的下一个节点存在,循环将遍历整个链表,在循环中,我们先判断cur.next节点的值是否等于val,如果相等则说明找到了要移除的节点,然后我们将cur.next节点的下一个节点赋值给cur.next,然后我们使用continue关键字直接进入下一次循环,如果cur.next节点的值不等于val则说明当前节点不需要移除,我们将cur指向下一个节点,继续遍历链表,当循环结束后,我们返回ret.next节点即可

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
};
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
199 1
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
308 3
|
9月前
|
存储
203. 移除链表元素,707.设计链表,206. 反转链表
链表是数据结构中的重要概念,包含单链表、双链表和循环链表。单链表每个节点存储数据与下一节点指针;双链表增加上一节点指针;循环链表首尾相连。 **例题解析:** 1. **203. 移除链表元素**:通过遍历链表删除指定值节点,注意处理头节点特殊情况。 2. **707. 设计链表**:实现链表的增删查操作,需理解指针操作逻辑,避免直接修改目标节点。 3. **206. 反转链表**:采用双指针或递归方法改变节点指向,完成链表反转。 以上题目涵盖链表核心操作,掌握后可灵活应对相关问题。
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
464 30
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
231 5
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
657 25
|
11月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
218 0
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
251 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

热门文章

最新文章