非循环单链表创建过程求解
程序代码:
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怎么办?
初学,实在找不到人问了,所以在这儿向各位大牛求解,感激不尽!