这是我的代码。我很确定我已正确实现了链接列表,但我认为存在一些语法错误。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct *node next;
};
void push(struct node** headRef, int data)
{
struct node* newNode;
newNode = malloc(sizeof(struct node));
newNode->data = data;
newNode->next = *headRef;
*headRef = newNode;
}
struct node* primeFactors(int num)
{
struct node* head = NULL;
if (num == 1)
{
return head;
}
int factor = 0;
int i = 2;
while (i <= num)
{
if (num % i)
{
factor = i;
}
}
push(&head, factor);
primeFactors(num / factor);
return head;
}
int main(int argc, char const *argv[])
{
struct node* head = primeFactor(600851475143);
printf("%d/n", head->data);
}
这是我的错误。我不知道大多数这些是什么意思,struct node肯定应该有一个名为next的成员。
[1] $ gcc 3.c -o 3 3.c:6:9: error: expected ‘{’ before ‘*’ token 3.c: In function ‘push’: 3.c:14:9: error: ‘struct node’ has no member named ‘next’ 3.c: In function ‘main’: 3.c:42:22: warning: initialisation makes pointer from integer without a cast [enabled by default]
非常感谢帮助!
答案 0 :(得分:6)
你的next
结构成员的星号错误。而不是
struct *node next;
应该是
struct node *next;
你的主要功能中也有拼写错误,导致initialization makes pointer from integer
警告。你输入了
struct node* header = primeFactor(600851475143);
但是你的函数名称是primeFactors
,复数,所以它应该是
struct node* header = primeFactors(600851475143);
您还使用了错误的数据类型作为primeFactors
函数的参数。带符号的32位整数不能存储大到600851475143的值,因此在分配值时会溢出它。假设您正在使用的系统支持它,请使用uint64_t
或unsigned long long
而不是int
和“%llu”作为printf
格式。
答案 1 :(得分:3)
错放了*
定义中的struct node
。应为struct node* next;
答案 2 :(得分:3)
struct *node next;
应为struct node * next;
答案 3 :(得分:3)
struct *node next;
应该是
struct node *next;