链表,一串数组序列,如4,5,1,3,2,7以递增或递减构成子序列,如(3,4,5),(5,1),(1,3),(3,2),(2,7),五个子序列,编写算法求链表有几个子序列(C语言描述)
编程小白考研真题没答案,请大佬赐教
#include <stdio.h>
#include <stdlib.h>
struct ListNode{
int value ;
struct ListNode* next ;
};
typedef struct ListNode* pListNode ;
typedef struct ListNode ListNode ;
int main( void )
{
int value[] = {4, 5, 1, 3, 2, 7} ;
int i = 0 ;
int numOfValue = sizeof(value) / sizeof(int) ;
pListNode head = NULL ;
pListNode tmp = NULL ;
pListNode plook = NULL ;
pListNode pre = NULL ;
if( numOfValue != 0 )
{
head = (pListNode)malloc( sizeof(ListNode) ) ;
head->value = value[0] ;
head->next = NULL ;
}
for( i = 1; i < numOfValue; i++ )
{
plook = head ;
pre = NULL ;
tmp = (pListNode)malloc( sizeof(ListNode) ) ;
tmp->value = value[i] ;
tmp->next = NULL ;
while( plook != NULL )
{
if(value[i] > plook->value)
{
pre = plook ;
plook = plook->next ;
}
else
{
break ;
}
}
if( pre == NULL )
{
tmp->next = head ;
head = tmp ;
}
else
{
tmp->next = pre->next ;
pre->next = tmp ;
}
}
plook = head ;
while(plook != NULL )
{
printf(" %d\t", plook->value) ;
plook = plook->next ;
}
}
没有注释也不知道你看不看的懂。。。不知道你这个题能不能使用头结点,要是能用一个头结点,插入的时候就不用了把代码写的这么麻烦了。