C 链表中的平方和



你好,我试图制作一个程序,该程序使用递归来获取整数的链表并对整数的平方求和。到目前为止,我已经尝试过了,但是我无法使平方求和的功能起作用。我不知道使用 pow() 是否是最好的方法?

#include <stdio.h>
#include <stdlib.h> 
#include <assert.h> 
#include<math.h>
typedef struct node
{
int value;
struct node* next;
} node;
/* terminal node at the end of the list */
node SENTINEL = {0, 0};
/* utility functions to create and free lists */
node * make_node(int v, node * q)
{
node* p = (node*) malloc(sizeof(node));
p->value = v;
p->next = q;
return p;
}
int sum_squares(node* list)
{
if(list == 0)
return 0;
else
{
return(pow(&list, 2) + sum_squares(list));
}


}
void free_node(node* p)
{
if(p == &SENTINEL)
return;
else
{
free_node(p->next);
free(p);
}
}
int main(void)
{
int sum;
node* list =    
make_node(1,
make_node(2,
make_node(3,
make_node(4,
make_node(5, &SENTINEL)
)
)
)
);
sum = sum_squares(list);
printf("The sum of squares is: %dn",sum);
free_node(list);
return 0;
} 

它应该等于当前数字的 55

您应该编辑一些内容!

  • sum_squares函数中,基本情况检查当前节点list是否等于 0,但您应该检查它是否是哨兵节点。
  • 在递归情况下,您应该使用pow(&list, 2)。 但是,&list返回参数list的地址。您要查找的是节点结构中保存的整数值,您可以使用->运算符获得该值。&list变得list->value.
  • 最后,当你递归调用下一个函数时,你向它传递同一个节点。这将导致它在同一节点上无限调用自身,并且永远不会实际遍历列表。与其再次传递list,不如通过list->next

更改应用如下:

int sum_squares(node* list)
{
if (list == &SENTINEL)
return 0;
return (pow(list->value, 2) + sum_squares(list->next));
}

相关内容

  • 没有找到相关文章