题目链接
链表实现最长连续递增子序列,复杂度为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;
}
转载请注明原文地址:https://blackberry.8miu.com/read-26687.html