C中的链表实现

时间:2014-02-27 05:12:28

标签: c insert linked-list

在以下链接列表实现的代码中,我收到错误cannot convert node_type to node * for argument 1 to 'node *insert(node *)'。我不明白这个消息。基本上,该程序无法从insert调用函数main()

有人可以帮忙解释一下吗?

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct node_type
{
    int data;
    node_type *next;
};

typedef struct node_type node;

node  *insert(node *head);
void print1(node *temp);

int main(void){
    int dat;
    char x,ch;

    node *temp;


    temp=NULL;
    printf("do u wanna enter a new node? \n");
    scanf("%c", &x);
    if (x=='y' or x=='Y'){

        temp=(node *)malloc(sizeof(node));
        printf("enter the data: \n");
        scanf("%d ", &dat);

        temp->data= dat;
        temp->next = NULL;
    }

    printf("do u want to insert another element?\n");
    scanf("%c ", &ch);
    if( ch=='y' or ch=='Y'){
        insert(temp);
    }
    print1(temp);

    getch();

}
node *insert(node *temp)
{
    int dat;
    char ch1;
    node *newnode;

    newnode=(node *)malloc(sizeof(node));

    printf("enter the data: ");
    scanf("%d", &dat);
    newnode->data=dat;
    newnode->next=temp;
    temp=newnode;

    printf("do u want to insert another element?\n");
    scanf("%c ", &ch1);
    if( ch1=='y' or ch1=='Y'){
        insert(temp);
    }
    else return temp;

}
void print1(node *temp)
{
    int t;

    while(temp!= NULL){
        t= temp->data;
        temp= temp->next;
        printf(" %d ", t);
    }
}

2 个答案:

答案 0 :(得分:1)

代码中的一些问题:

  1. struct node_type

    的定义
    struct node_type
    {
        int data;
        node_type *next;
    };
    

    根据C语法不正确,node_type语句之前不存在typedef struct node_type node;类型。

    要解决此问题,您可以

    a)像这样定义struct node_type

    struct node_type
    {
        int data;
        struct node_type *next;
    };
    

    b)使用(谢谢@yongzhy)

    typedef struct node_type
    {
        int data;
        struct node_type *next;
    };
    

    c)使用C ++编译器编译代码。 (谢谢@JonathanLeffler)

  2. 所有这些

    if (x=='y' or x=='Y'){
    

    应替换为

    if (x=='y' || x=='Y'){
    

    或者您可以添加<iso646.h>,其中包含#define or ||(感谢@JonathanLeffler),

    或者您应该使用C ++编译器编译代码。

答案 1 :(得分:0)

添加到@leeduhem

typedef struct node_type
{
    int data;
    struct node_type *next;
} node;

这将使

的附加行无效
typedef struct node_type node;