a1362398994 发表于 2016-3-2 12:37:01

C语言实现链表出错提示node没有定义,但是明明定义了啊

#include <stdio.h>
#include<stdlib.h>
struct list
{
        int data;//数据域
        struct list *next;//指针域
};
struct list *create_list()//建立一个节点
{
        return calloc(sizeof(struct list),1);
}
/*struct list *insert_list(struct list *ls,int n,int data)//在指定位置插入元素
{
        struct list *p=ls;
        while(p && n--)
        {
          p=p->next;
        }
        if(p==NULL)
        {
                return NULL;//n的位置大于链表节点数目
        }
        struct list *node=create_list();
        node->data=data;
        node->next=p->next;
        p->next=node;
        return node;
}*/
struct list *insert_list(struct list *ls, int n, int data)//在指定位置插入元素
{
    struct list *p = ls;
    while(p && n--)
    {
      p = p->next;
    }

    if (p == NULL)
    {
      return NULL;//n的位置大于链表节点数
    }

   
        struct list *node=create_list();//新建立一个节点
    node->data = data;
    node->next = p->next;
    p->next = node;
    return node;
}
void traverse(struct list *ls)//循环遍历链表
{
        struct list *p=ls;
        while(p)//最后一个节点数据还是不为空所以进入到w循环
                //但是再next一次就是空的不能进行了
        {
                printf("%d\n",p->data);
                p=p->next;//p指向对应的下一个节点
        }


}

int main(void)
{
        //struct list *first=calloc(sizeof(struct list),1);//在堆中间创建一个节点
        struct list *first=create_list();
        struct list *second=create_list();//在堆中间创建一个节点
        struct list *third=create_list();//在堆中间创建一个节点
       
        first->next=second;
        second->next=third;
        third->next=NULL;

        first->data=1;
        second->data=2;
        third->data=3;

        //insert_list(first,2,10);
        traverse(first);
        return 0;

}

~风介~ 发表于 2016-3-2 21:33:53

看看这个吧:http://bbs.fishc.com/forum.php?mod=viewthread&tid=45460&ctid=184

a1362398994 发表于 2016-3-7 20:03:36

我已经知道我的原因了,是编译器不对,在vc6.0上不通过,在vs2013上可以通过,gcc也可以通过
页: [1]
查看完整版本: C语言实现链表出错提示node没有定义,但是明明定义了啊