Next Greater Node in Linked List — Monotonic Stack

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 230 · Next Greater Node in Linked List

Difficulty: Medium · Pattern: Monotonic Stack

For each node, find the value of the next node that is strictly greater.

Solutions

# Python
def nextLargerNodes(head):
    vals = []
    while head: vals.append(head.val); head = head.next
    res = [0] * len(vals)
    stack = []  # indices, monotone decreasing values
    for i, v in enumerate(vals):
        while stack and vals[stack[-1]] < v:
            res[stack.pop()] = v
        stack.append(i)
    return res
// Java
public int[] nextLargerNodes(ListNode head) {
    List<Integer> vals = new ArrayList<>();
    while (head != null) { vals.add(head.val); head = head.next; }
    int n = vals.size();
    int[] res = new int[n];
    Deque<Integer> stack = new ArrayDeque<>();
    for (int i = 0; i < n; i++) {
        while (!stack.isEmpty() && vals.get(stack.peek()) < vals.get(i))
            res[stack.pop()] = vals.get(i);
        stack.push(i);
    }
    return res;
}

Complexity

  • Time: O(n)
  • Space: O(n)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro