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

链表,一串数组序列,如4,5,1,3,2,7以递增或递减构成子序列,如(3,4,5),(5,1),(1,3),(3,2),(2,7),五个子序列,编写算法求链表有几个子序列(C语言描述)
编程小白考研真题没答案,请大佬赐教

1个回答

#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 ;
    }
}

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

zx4738475
知天易,逆天难 这是回忆版的真题,可能有错误,谢谢,您帮我解答
大约一年之前 回复
D_DreKing
D_DreKing 回复知天易,逆天难: 你补充完之后,我没看懂题。。。你的数组序列是4、5、1、3、2、7。然后你找这里面的子序列。是序列,那(3,4,5)这个答案怎么出来的?要是序列的话(1,2)(1,2,7)这都算答案呢。序列是字符之间相对原串中先后顺序不变,可以不连续。子串是需要连续的。
大约一年之前 回复
zx4738475
知天易,逆天难 大佬,我刚才问题没打全,您再帮我看看,可以使用头结点的
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐