Day24: [LeetCode中等] 1019. 链表中的下一个更大节点

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;
    }
};
发布了49 篇原创文章 · 获赞 13 · 访问量 524

猜你喜欢

转载自blog.csdn.net/qq2215459786/article/details/103202696
今日推荐