#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;**_//数据域_**_
struct Node *pNext;**_//指针域_**
}Node,*pNode;**_//Node等价与 struct Node,pNode等价与 struct Node* _**
pNode create_list(void)**_;//该函数功能是创建一个非循环单链表,并将该链表的头结点的地址发生给phead_**
void traverse_list(pNode phead);**_//该函数功能是将一个链表进行便历 _**
int main(void)
{
pNode phead =NULL;**_//等价于 struct Node* phead=NULL; _**
phead=create_list();
traverse_list(phead);
return 0;
}
pNode create_list(void)
{
int length;**_//链表的长度 _**
int val;**_//用来存放用户临时存入结点的值 _**
int i;
pNode phead=(pNode)malloc(sizeof(Node));**_//分配了一不存放有效数据的头结点 _**
if(NULL==phead)
{
printf("分配内存失败,程序终止!\n");
exit(-1);
}
pNode pTail=phead;**_//分配了一个尾结点_**
pTail->pNext=NULL;
printf("请输入您需要生成链表结点的个数:length=");
scanf("%d",&length);
for(i=0;i<length;++i)
{
printf("请输入第%d个结点数据:",i+1);
scanf("&d",&val);
pNode pNew=(pNode)malloc(sizeof(Node));
if(NULL==pNew)
{
printf("分配内存失败,程序终止!\n");
exit(-1);
}
printf("\n");
pNew->data=val;**_//给新结点的数据域赋值 _**
pTail->pNext=pNew;**_//将尾结点指向新结点 _**
pNew->pNext=NULL;**_//将新结点的指针域清空 _**
pTail=pNew;**_//将新结点变为尾结点 _**
}
return phead;
}
void traverse_list(pNode phead)
{
pNode p=phead->pNext;
while(NULL!=p)
{
printf("%d\n",p->data);
p=p->pNext;
}
printf("\n");
return;
}
为什么会出现这样的情况?