【问题标题】:How to do a recursive function for linked node list如何为链接节点列表执行递归函数
【发布时间】:2023-10-30 12:34:01
【问题描述】:

你好,我必须实现一个递归函数,输入一个列表的头部,将每个节点的和之后的所有节点相加。 (如果列表是 1->2->3,则它必须变为 6->5->3)然后将所有节点相加,例如变量k 变为 6+5+3 所以k=14。我无法实现它,你能告诉我我该怎么做吗? 谢谢

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int val;
    struct node *next;
} node_t;

void somma(node_t *head, int *sum);

int recursive(node_t *head, int *sum);

int main (){

    int max, i, sum=0, sum2=0;

    node_t *head = NULL;
    head = (node_t *)malloc(sizeof(node_t));
    node_t *temp = head;

    printf("Quanti valori vuoi inserire: \n");
    scanf("%d", &max);

    for (i=0; i < max; i++){
        temp->next = (node_t *)malloc(sizeof(node_t));
        printf("Inserisci il valore in posizione %d\n", i);
        scanf("%d", &temp->val);
        temp = temp->next;
        temp->next = NULL;
    }

    somma(head, &sum);

    printf("La somma e' %d\n", sum);

    recursive(head, &sum2);

    printf("La somma calcolata rec e': %d\n", sum2);

    return 0;
}

void somma(node_t *head, int *sum){

    node_t *curr = head;
    node_t *start = head;

    while(start->next != NULL){
        while (curr->next != NULL){
            curr = curr->next;
            start->val += curr->val;
        }
        start = start->next;
        curr = start; 
    }

    start = head;

    while (start->next != NULL){
        (*sum) += start->val;
        start = start->next;
    }

    return ;
}

【问题讨论】:

    标签: c99


    【解决方案1】:

    这些应该可以工作。

    int sumList(LinkedList head) {
          if (head == null) return 0;
          int sum = head.value += sumList(head.next);
          return sum;
    }
    

    像大多数递归算法一样,定义一个结束条件。

    然后递归,将累积值与当前值相加,返回这个总和。

    【讨论】:

    • 对不起,这比 c 更 Java,但我这里没有真正的键盘。
    • 不,我没有得到“警告:从 'int *' 分配给 'int' 使得指针从没有强制转换的整数 [-Wint-conversion] *sum2 += head->val +递归(head->next, sum2);"
    • 算法有效。我没有分裂,只是伪代码。您必须输入指针符号。
    最近更新 更多