|
楼主 |
发表于 2016-3-2 22:46:51
|
显示全部楼层
#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);
system("pause");
return 0;
}
//代码贴出来,为什么这段代码在vs2013上可以运行成功,但是在vc6.0上不能通过呢?!在dev上也是不行的这是为什么呢?! |
|