/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
typedef struct ListNode Node;
int get_len(Node *head){
int i=0;
while(head){
i++;
head = head->next;
}
return i;
}
int* nextLargerNodes(struct ListNode* head, int* returnSize) {
int LEN = get_len(head);
int *ret = (int *)malloc(sizeof(int) * LEN);
int *arr = (int *)malloc(sizeof(int) * LEN);
int i, j;
int index = 0;
int len=0;
for(i=0; i<LEN; i++){
ret[i] = arr[i] = 0;
}
struct ListNode *p = head;
while(p){
arr[len++] = p->val;
p = p->next;
}
int max = 0;
for(i=len-1; i>=0; i--){
/* 优化(否则会超时):
* 从后往前遍历数组,将遍历过的元素的最大值记下来,如果当前
* 遇到的元素比之前的最大值还要大,则直接将其设置为0;
* 否则,需要向后查找比之大的第一个元素
*/
if(arr[i] > max){
max = arr[i];
ret[i] = 0;
continue;
}
for(j=i+1; j<len; j++){
if(arr[j] > arr[i]){
ret[i] = arr[j];
break;
}
}
}
*returnSize = len;
free(arr);
return ret;
}
LeetCode-1019-链表中的下一个更大节点-C语言
最新推荐文章于 2022-05-10 10:47:19 发布