2

这是我的代码。我相当确定我已经正确实现了链接列表,但我认为存在一些语法错误。

#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: 错误: '*' 标记之前的预期'{'
    3.c:在“推”功能中:
    3.c:14:9:错误:“结构节点”没有名为“下一个”的成员
    3.c:在函数'main'中:
    3.c:42:22: 警告:初始化使指针从整数而不进行强制转换 [默认启用]

帮助真的很感激!

4

4 回答 4

6

您将星号放在nextstruct 成员的错误位置。代替

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_torunsigned long long代替int,并将 "%llu" 作为printf格式。

于 2012-11-05T19:27:29.290 回答
3

*struct node定义中放错了。应该struct node* next;

于 2012-11-05T19:27:38.757 回答
3

struct *node next;应该struct node * next;

于 2012-11-05T19:27:39.243 回答
3
  struct *node next; 

应该

 struct node *next;
于 2012-11-05T19:27:51.487 回答