|
|
发表于 2012-2-14 22:24:52
|
显示全部楼层
本帖最后由 Tazy_ong 于 2012-2-15 13:23 编辑
运行没发现有什么错误啊,就不知道有没有BUG,没有仔细调试过,不过程序运行完后记得释放内存,不然会导致内存泄露。- #include <stdio.h>
- //#include <malloc.h> //stdlib.h头文件中已包含malloc函数了
- #include <stdlib.h>
- //函数声明
- struct Node * create_list(void);
- void traverse_list(struct Node * pHead);
- struct Node
- {
- int data;
- struct Node *pNext;
- };
- void main()
- {
- struct Node * pHead = NULL;
-
- pHead = create_list();//功能:创建一个非循环单链表
- traverse_list(pHead);
- }
- struct Node * create_list(void)
- {
- int len; //用来存放有效节点的个数
- int i;
- int val; //用来临时存放用户输入的节点的值
-
- //分配了一个不存放有效数据的头结点
- struct Node * pHead = (struct Node *)malloc(sizeof(struct Node));
- if(NULL == pHead)
- {
- printf("分配内存失败,程序终止!\n");
- exit(-1);
- }
- struct Node * pTail = pHead;
- pTail->pNext = NULL;
- struct Node * pNew; //定义指针变量
-
- printf("请输入需要生成的链表节点的个数:len = ");
- scanf("%d",&len);
-
- for (i=0; i<len; i++)
- {
- printf("请输入第%d个节点的值: ",i+1);
- scanf("%d",&val);
-
- //struct Node * pNew = (struct Node *)malloc(sizeof(struct Node)); //最好不要在for循环中定义变量
- pNew = (struct Node *)malloc(sizeof(struct Node)); //创建动态内存空间
- if(NULL == pNew)
- {
- printf("分配内存失败,程序终止!\n");
- exit(-1);
- }
- pNew->data = val;
- pTail->pNext = pNew;
- pNew->pNext = NULL;
- pTail = pNew;
- }
- return pHead;
- }
- void traverse_list(struct Node * pHead)
- {
- struct Node * p = pHead->pNext;
- struct Node *pToFree = p;
- while (NULL != p)
- {
- printf("%d ",p->data);
- p = p->pNext;
- free(pToFree); //记得释放动态内存空间,不然会导致内存泄露
- pToFree = p; //拷贝地址
- }
- printf("\n");
- free(pHead); //释放内存空间
- return;
- }
复制代码 |
|