1.单调栈
使用一个栈s存储元素下标,结果数组res存储最终的结果
遍历链表中的每一个元素,如果当前元素的值大于栈顶所指向的元素,则栈顶对应的下标的下一个最大值是当前节点的值,弹出栈顶节点;
将当前节点入栈,参与寻找比其大的值
最后栈中剩余的都是未找到比起大的元素,则比其大的值设为0
代码如下:
// 栈解法
class Solution {
public:
vector<int> nextLargerNodes(ListNode* head) {
vector<int> res;
stack<int> s;//栈中存放的是下标
int i = 0;
while(head != nullptr) {
while(!s.empty() && head->val > res[s.top()]) {
res[s.top()] = head->val;
s.pop();
}
res.push_back(head->val);
s.push(i++);
head = head->next;
}
//栈中剩余的下标是未找到下一个最大值的元素
while(!s.empty()) {
res[s.top()] = 0;
s.pop();
}
return res;
}
};