2487. 从链表中移除节点 --力扣 --JAVA

简介: 给你一个链表的头节点 head 。移除每个右侧有一个更大数值的节点。返回修改后链表的头节点 head 。

 题目

给你一个链表的头节点 head

移除每个右侧有一个更大数值的节点。

返回修改后链表的头节点 head 

解题思路

    1. 移除每个右侧有一个更大数值的节点,所以可以利用深度遍历,从后往前进行比较;
    2. 创建变量max来表示当前右侧的最大值;
    3. 将最后节点的值赋值给max;
    4. 若当前节点的值小于当前节点则移除,否则修改max为当前节点的值,链表是单向的,直接移除当前节点不好移除,可以将下个节点的值和next赋值给当前节点,即用下个节点取代当前节点。

    代码展示

    class Solution {
        private int max = 0;
        public ListNode removeNodes(ListNode head) {
            dfs(head);
            return head;
        }
        private void dfs(ListNode root){
            if(root == null){
                return;
            }
            dfs(root.next);
            if(root.val < max){
                root.val = root.next.val;
                root.next = root.next.next;
            } else {
                max = root.val;
            }
        }
    }

    image.gif


    目录
    相关文章
    |
    6天前
    |
    算法
    【优选算法专栏】专题九:链表--------两两交换链表中的节点
    【优选算法专栏】专题九:链表--------两两交换链表中的节点
    18 0
    |
    6天前
    LeetCode链表hard 有思路?但写不出来?
    LeetCode链表hard 有思路?但写不出来?
    链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
    链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
    |
    6天前
    |
    索引
    每日一题:力扣328. 奇偶链表
    每日一题:力扣328. 奇偶链表
    14 4
    |
    6天前
    leetcode代码记录(完全二叉树的节点个数
    leetcode代码记录(完全二叉树的节点个数
    9 1
    |
    6天前
    leetcode代码记录(移除链表元素
    leetcode代码记录(移除链表元素
    11 0
    |
    6天前
    |
    存储 Java
    高效删除链表倒数节点最优实现
    要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
    【每日一题】LeetCode——反转链表
    【每日一题】LeetCode——反转链表
    【每日一题】LeetCode——链表的中间结点
    【每日一题】LeetCode——链表的中间结点
    |
    6天前
    |
    C++
    [leetcode 链表] 反转链表 vs 链表相交
    [leetcode 链表] 反转链表 vs 链表相交