Tue. Mar 28th, 2023

#### ByKnight Coderz

Apr 2, 2020

We are given a linked list with `head` as the first node.  Let’s number the nodes in the list: `node_1, node_2, node_3, ...` etc.

Each node may have a next larger value: for `node_i``next_larger(node_i)` is the `node_j.val` such that `j > i``node_j.val > node_i.val`, and `j` is the smallest possible choice.  If such a `j` does not exist, the next larger value is `0`.

Return an array of integers `answer`, where `answer[i] = next_larger(node_{i+1})`.

Note that in the example inputs (not outputs) below, arrays such as `[2,1,5]` represent the serialization of a linked list with a head node value of 2, second node value of 1, and third node value of 5.

Example 1:

```Input: [2,1,5]
Output: [5,5,0]
```

Example 2:

```Input: [2,7,4,3,5]
Output: [7,0,5,5,0]
```

Example 3:

```Input: [1,7,5,1,9,2,5,1]
Output: [7,9,9,9,0,5,0,0]```
``/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public int[] nextLargerNodes(ListNode head) {        List<Integer> resultList = new ArrayList<Integer>();        ListNode temp = head;        while(temp != null){            ListNode t = temp.next;            int val = temp.val;            boolean foundGreaterVal = false;            while(t != null){                if(t.val > val){                  resultList.add(t.val);                  foundGreaterVal = true;                    break;                  }                t = t.next;            }            if(foundGreaterVal == false) resultList.add(0);            temp = temp.next;        }        //System.out.println(resultList);        int[] result = resultList.stream().mapToInt(i -> i).toArray();        //System.out.println(Arrays.toString(result));        return result;    }}``