题目链接
链表实现最长连续递增子序列,复杂度为O(1)
#include <stdio.h>
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
int main()
{
int n;
cin >> n;
LinkNode *L, *pre, *s;
L = (LinkNode *)malloc(sizeof(LinkNode));
L -> next = NULL;
pre = L;
for(int i = 0; i < n; i++)
{
ElemType x;
cin >> x;
s = (LinkNode *)malloc(sizeof(LinkNode));
s -> data = x;
s -> next = pre -> next;
pre -> next = s;
pre = s;
}
int length = 1, Max_length = 1;
LinkNode *start, *Max_start;
pre = L -> next;
start = L -> next;
Max_start = start;
while(pre != NULL)
{
length = 1;
while((pre -> next != NULL) && (pre -> data < pre -> next -> data))
{
length ++;
pre = pre -> next;
}
if(length > Max_length)
{
Max_length = length;
Max_start = start;
}
start = pre -> next;
pre = pre -> next;
}
length = 1;
cout<< Max_start -> data;
Max_start = Max_start -> next;
while(Max_start != NULL && length < Max_length)
{
cout << ' '<< Max_start -> data ;
Max_start = Max_start -> next;
length ++;
}
return 0;
}