Next Greater Node in Linked List — Monotonic Stack
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