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

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

题目


给一个链表的头节点 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天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
8 0
|
4天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
|
19天前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
15 0
|
24天前
|
存储 算法
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
22 1
|
24天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
18 3
|
25天前
|
存储 算法
双链表——“数据结构与算法”
双链表——“数据结构与算法”
|
27天前
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
|
1月前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
17 0
|
1月前
|
算法
算法系列--链表刷题(二)(上)
算法系列--链表刷题(二)
19 0
|
1月前
|
算法
算法系列--递归(一)--与链表有关(下)
算法系列--递归(一)--与链表有关(下)
21 0