C语言 链接列表的总和

ars1skjm  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(142)

我目前面临着一个问题,我的代码时,试图一个链接表的总和,我试图调用链接表从我的代码和我有麻烦编译。我不知道该怎么办在这种情况下。

PE12.c: In function ‘sumOfLinkedList’:
PE12.c:69:28: error: invalid operands to binary + (have ‘Link’ and ‘struct Link’)
        sum = *current_link + *current_link->next;
                            ^

这是我目前得到的编译错误。
这是我的代码

#include <stdio.h>  /* for printf */
#include <stdlib.h> /* for malloc, free, NULL */
#include "link.h"

#define ARR_SZ 6

/* function for step 1 */
Link* getNewLink(int value, Link* next); 

/* function for step 4 */
void printLinkedList(Link* head); 

/* function for step 5 */
int sumOfLinkedList(Link* head);  

int main() {
    Link* head = NULL;
    int array[ARR_SZ] = {7, 1, -4, 16, 0, 3};
    int arrLen = ARR_SZ;
    int i = 0;

    /* Step 1: add the value -2 to the linked list */
    getNewLink(-2, head);
    /* TODO - Your code for Step 1 goes here 
     * You must also implement getNewLink() */
     
    /* Step 2: print the value at head */
    printf("%p", head);
    /* TODO - Your code for Step 2 goes here  */
    /* Step 3: add the 6 values from array to the linked list */
    for(i=0; i <= array[i] && i < arrLen; ++i) {
        getNewLink(i, head);
    } 
    /* TODO - Your code for Step 3 goes here */
    /* Step 4 */
    printLinkedList(head);

    /* Step 5 */
    printf("The sum is: %d\n", sumOfLinkedList(head));

    return EXIT_SUCCESS;
}

Link* getNewLink(int value, Link* next) {

    Link* newNode = (Link*) malloc(sizeof(Link));
    newNode->value = value;
    newNode->next = NULL;
    
    return newNode;
}

void printLinkedList(Link* head) {
    
    while (head != NULL) {
        printf("%d ", head->value);
        head = head->next;
    }
}

int sumOfLinkedList(Link* head) {

    int sum;
    
    Link *current_link = head;
       while ( current_link != NULL) {
        printf("%d ", current_link->value);
       sum = *current_link + *current_link->next;
    }
    
    return sum;
}

谁能给我解释一下我在这里做错了什么?

2ledvvac

2ledvvac1#

需要将current_link->value添加到sum中。解除指针引用返回Link结构,该结构不能被添加。
您必须通过next指针遍历列表。
您还必须将sum初始化为0
不需要单独的headcurrent_link变量,可以在循环中使用同一个变量作为函数参数。

int sumOfLinkedList(Link* current_link) {

    int sum = 0;
    
    while ( current_link != NULL) {
        printf("%d ", current_link->value);
        sum += current_link->value;
        current_link = current_link->next;
    }
    
    return sum;
}

相关问题