#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
Node* next;
Node(
int
data, Node* next)
: data(data)
, next(next)
{
}
};
void
findMaxGap(Node* head)
{
Node* pre =
new
Node(-1, head);
Node* cur = head;
int
lastIndex = -1, currentIndex = 0, maxGap = 0,
gap = 0;
while
(cur != NULL) {
Node* next = cur->next;
if
(pre->next == head && next == NULL) {
cout << maxGap;
return
;
}
else
if
(pre->next == head
&& next->data < cur->data) {
lastIndex = currentIndex;
}
else
if
(next == NULL && pre->data < cur->data) {
if
(lastIndex != -1) {
lastIndex = currentIndex;
}
else
{
gap = currentIndex - lastIndex - 1;
maxGap = max(gap, maxGap);
lastIndex = currentIndex;
}
}
else
if
(pre->data < cur->data
&& next->data < cur->data) {
if
(lastIndex != -1) {
lastIndex = currentIndex;
}
else
{
gap = currentIndex - lastIndex - 1;
maxGap = max(gap, maxGap);
lastIndex = currentIndex;
}
}
pre = pre->next;
cur = cur->next;
currentIndex++;
}
cout << maxGap <<
"\n"
;
}
int
main()
{
Node* head =
new
Node(1, NULL);
head->next =
new
Node(2, NULL);
head->next->next =
new
Node(3, NULL);
head->next->next->next =
new
Node(1, NULL);
head->next->next->next->next =
new
Node(5, NULL);
head->next->next->next->next->next =
new
Node(4, NULL);
head->next->next->next->next->next->next
=
new
Node(4, NULL);
head->next->next->next->next->next->next->next
=
new
Node(10, NULL);
head->next->next->next->next->next->next->next->next
=
new
Node(7, NULL);
findMaxGap(head);
}