题目
1019. Next Greater Node In Linked List
思路
单调栈
易错点
1 找不到下一个更大值要输出0
2 用数组记录元素所在位置的思路是错误的,因为会有重复元素,而只能记录相同元素中最后一个的位置,如225,错误输出为050,而正确应该为550
题解
```cpp
#include <iostream>
#include <vector>
#include <cstring>
#include <stack>
#include <algorithm>
#include <cmath>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
vector<int> nextLargerNodes(ListNode* head) {
stack<int> sk;
vector<int> ans,nums;
ListNode * p = head;
// 将链表转为数组
while(p!=NULL) {
nums.push_back(p->val);
p=p->next;
}
ans.resize(nums.size());
for(int i=0; i<nums.size(); i++) {
int num = nums[i];
ans[i]=0;
while(!sk.empty()&&nums[i]>nums[sk.top()]) {
ans[sk.top()]=num;
sk.pop();
}
sk.push(i);
}
return ans;
}
int main(int argc,char * argv[]) {
ListNode* head=new ListNode(2);
ListNode* h1=new ListNode(1);
ListNode* h2=new ListNode(5);
head->next=h1;
h1->next=h2;
vector<int> ans = nextLargerNodes(head);
for_each(ans.begin(),ans.end(),[](int a) {
printf("%d ",a);
});
return 0;
}