如何使用递归在链表中添加整数?

时间:2019-04-06 22:51:40

标签: c recursion linked-list

我具有不使用递归和的基本代码。一个不使用递归的变量将在链表中所有整数的总和后打印出67。在我的递归程序中,似乎读取了第二个整数并停止,甚至没有将其添加到第一个整数。

我已经添加了一条打印语句作为测试程序,以便可以看到它在链接列表中得到的数字。

// Linked list summ - recursive

int rllsum( struct lnodetype *t )

        int sum = 0;
        while(t != NULL)
        {
                sum = t->val + sum;
                printf("%d\n", t->val);
                t = t->ptr;
                rllsum(t);
        }

        return sum;


// Basic main program

int main()

        struct lnodetype *h, *t;
        int x, y;

        // build a list
        h = NULL;
        for ( x = 0; x < 5; ++x )
        {
                t = malloc(sizeof(struct lnodetype));
                t->val = n*(x+1)*(rand()%n+1)%19+1;
                t->ptr = h;
                h = t;
                printf("%d\n", t->val);
        }

        t = h;
        y = rllsum( t );
        printf("\n%d, %d\n", y);

        return 0;

我希望输出为67,但是我可以完全确定。截至目前,它已打印出14张。

1 个答案:

答案 0 :(得分:0)

我发现递归的新手使他们的功能变得比必要的更为复杂。考虑:

int rllsum(struct lnodetype *t)
{
    int sum = 0;

    if (t != NULL)
    {
        sum = t->val + rllsum(t->ptr);
    }

    return sum;
}

此外,如图所示,您的main函数已损坏:未定义的n变量;缺少花括号;尝试printf()两个数字,但仅提供一个。