链表中下一个更大节点的 Java 实现
思路:利用单调栈,维护一个单调递减的栈。遍历链表,如果当前节点的值比栈顶元素大,则说明栈顶元素的下一个更大节点就是当前节点,将栈顶元素出栈,并将其下一个更大节点值设置为当前节点的值。重复该过程直到当前节点小于等于栈顶元素,将当前节点入栈。最后遍历完链表后,栈中剩余的节点没有下一个更大节点,将它们的答案设置为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;
}
}
原文地址: https://www.cveoy.top/t/topic/ngLK 著作权归作者所有。请勿转载和采集!