https://leetcode-cn.com/problems/next-greater-node-in-linked-list/
思路:简而言之,就是求每个节点右侧大于它的第一个节点的值。单调栈可解,首先把链表转为普通的数组就行了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> nextLargerNodes(ListNode* head) {
vector<int> list;
while(head){
list.push_back(head->val);
head=head->next;
}
int siz=list.size();
vector<int> ans(siz);
stack<int> stk;
for(int i=0;i<siz;i++){
if(stk.empty()||list[i]<=list[stk.top()])
stk.push(i);
else{
int idx;
while(!stk.empty()&&list[i]>list[idx=stk.top()]){
ans[idx]=list[i];
stk.pop();
}
stk.push(i);
}
}
while(!stk.empty()){
ans[stk.top()]=0;
stk.pop();
}
return ans;
}
};