非循环单链表创建过程求解
程序代码:typedef struct Node
{
int data; // 数据域
struct Node * pNext; // 指针域
}NODE,* PNODE;
程序代码:PNODE create_list(void)
{
int len; // 用来存放有效节点个个数
int i;
int val; // 用来临时存放用户输入的节点的值
PNODE pHead = (PNODE)malloc(sizeof(NODE)); // 分配了一个不存放有效数据的头节点
if (NULL == pHead)
{
printf("分配失败,程序终止\n");
exit(-1);
}
PNODE pTail = pHead; // 尾指针
pTail->pNext = NULL;
printf("请输入你需要生成的链表节点个数:");
scanf("%d", &len);
for (i = 0; i < len; ++i)
{
printf("请输入第%d个节点的值:",i + 1);
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("分配失败,程序终止\n");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
后面四行代码看不太懂
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
是否可以理解为:将输入的值val存入新节点pNew中的数据域, 尾指针pTail指向了pNew,pNew就挂在了pTail的后面,再将pNew中的指针域清空,但是最后一句 pTail = pNew 是什么意思?下一次循环时是不是又造出了一个新的节点pNew,那么上次循环中的pNew怎么办?
初学,实在找不到人问了,所以在这儿向各位大牛求解,感激不尽!










