思路:利用单调栈,维护一个单调递减的栈。遍历链表,如果当前节点的值比栈顶元素大,则说明栈顶元素的下一个更大节点就是当前节点,将栈顶元素出栈,并将其下一个更大节点值设置为当前节点的值。重复该过程直到当前节点小于等于栈顶元素,将当前节点入栈。最后遍历完链表后,栈中剩余的节点没有下一个更大节点,将它们的答案设置为0即可。

时间复杂度:O(n),空间复杂度:O(n)。

Java代码如下:

class Solution {
    public int[] nextLargerNodes(ListNode head) {
        List<Integer> list = new ArrayList<>();
        while (head != null) {
            list.add(head.val);
            head = head.next;
        }
        int[] res = new int[list.size()];
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < list.size(); i++) {
            int val = list.get(i);
            while (!stack.isEmpty() && val > list.get(stack.peek())) {
                res[stack.pop()] = val;
            }
            stack.push(i);
        }
        return res;
    }
}
链表中下一个更大节点的 Java 实现

原文地址: https://www.cveoy.top/t/topic/ngLK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录