链表编程,考研真题,想不出答案

链表,一串数组序列,如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 ;
    }
}

没有注释也不知道你看不看的懂。。。不知道你这个题能不能使用头结点,要是能用一个头结点,插入的时候就不用了把代码写的这么麻烦了。