Day24: [LeetCode中等] 1019. 链表中的下一个更大节点
题源:
来自leetcode题库:
https://leetcode-cn.com/problems/next-greater-node-in-linked-list/
思路:
我是先把链表转存在数组中,然后逆序遍历,用数组xiabiao来储存下一个更大值的数组下标,若没有就是-1。逆序遍历的时候,比较和下一个的值的大小,若小于,则更改下就好;若大于或等于,则要按照xiabiao数组来和下一个更大值对比。
其实这道题应该用栈的,用栈效率更高。
代码:
dirty code凑合看吧
/**
* 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) {
if(!head){
return vector<int>(0);
}else if(head->next==NULL){
return vector<int>(1,0);
}
auto p=head;
vector<int> res;
while(p){
res.push_back(p->val);
p=p->next;
}
int Len=res.size()-1;
vector<int> res2=res,xiabiao(Len+1,-1);
res2[Len]=0;
for(int i=Len-1;i>=0;i--){
if(res[i]<res[i+1]){
res2[i]=res[i+1];
xiabiao[i]=i+1;
}else{
if(res2[i+1]==0) {
res2[i]=0;continue;
}
int j;
for(j=xiabiao[i+1];j!=-1;j=xiabiao[j]){
if(res[i]<res[j]){
res2[i]=res[j];
xiabiao[i]=j;
break;
}
}
if(j==-1) res2[i]=0;
}
}
return res2;
}
};