C实现链表的各种错误

时间:2012-11-05 19:25:21

标签: c debugging linked-list

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

#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]

非常感谢帮助!

4 个答案:

答案 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_tunsigned 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;