2487-从链表中移除节点

Raphael Liu Lv10

给你一个链表的头节点 head

对于列表中的每个节点 node ,如果其右侧存在一个具有 严格更大 值的节点,则移除 node

返回修改后链表的头节点 __head __ 。

示例 1:

**输入:** head = [5,2,13,3,8]
**输出:** [13,8]
**解释:** 需要移除的节点是 5 ,2 和 3 。
- 节点 13 在节点 5 右侧。
- 节点 13 在节点 2 右侧。
- 节点 8 在节点 3 右侧。

示例 2:

**输入:** head = [1,1,1,1]
**输出:** [1,1,1,1]
**解释:** 每个节点的值都是 1 ,所以没有需要移除的节点。

提示:

  • 给定列表中的节点数目在范围 [1, 105]
  • 1 <= Node.val <= 105
class Solution {
    int tmpMax = INT_MIN;   //记录链表右侧的最大值
public:
    ListNode* removeNodes(ListNode* head) {
        if (head == nullptr) return head;   //递归的边界
        head->next = removeNodes(head->next);   //递归调用
        tmpMax = max(head->val, tmpMax);        //更新最大值
        return tmpMax > head->val ? head->next : head;  //若右侧有更大的,则舍弃这个节点
    }
};
 Comments
On this page
2487-从链表中移除节点