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

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

题目


给一个链表的头节点 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
};
相关文章
|
3月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
42 1
|
3月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
65 3
|
3月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
56 0
|
3月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
56 0
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
3月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
58 4
|
3月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
3月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
3月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇

热门文章

最新文章