2
public int[] nodesBetweenCriticalPoints(ListNode head) {3
int res[] = new int[] {-1, -1};4
if (head == null || head.next == null || head.next.next == null) return res;5
int minidx = Integer.MAX_VALUE, curridx = -1, lastidx = -1;6
ListNode prev = head, ptr = head.next;7
int idx = 1, minD = Integer.MAX_VALUE;8
while (ptr != null && ptr.next != null) {9
if ((ptr.val > prev.val && ptr.val > ptr.next.val)10
|| (ptr.val < prev.val && ptr.val < ptr.next.val)) {11
if (idx < minidx) minidx = idx;14
if (lastidx != -1 && curridx - lastidx < minD) minD = curridx - lastidx;20
if (lastidx == -1) return res;23
res[1] = curridx - minidx;