pEnd是指向这个链表的最后一个结点的指针,所以当新增加一个节点时,就会把这个新结点作为链表的最后一个结点,pEnd->pNext = pNew就起到将pNew加到链表结尾的作用,然后pEnd=pNew的作用就是让pEnd指向新的结尾。用图表示一下就更清楚了
原来的链表是这样的:
pHead pEnd
| |
student1 -> student2 -> student3 ->......-> studentN -> NULL
增加一个studentN+1进来,就要把studentN(这时pEnd=studentN)的next指向studentN+1,然后让pEnd=studentN+1:
pHead pEnd
| |
student1 -> student2 -> student3 ->......-> studentN -> studentN+1 -> NULL
pnew->pnext = null
将新创建的节点的指针域赋值为空。以便连接到链表最后,链表最后一个节点的指针指向空,是判断单向链表结束的标志。
pend是你以前的末节点。pend->pnext = null;执行
pEnd->pNext=pNew之后,pend的指针域指向新节点,新节点成为最后一个节点。
pEnd=pNew;将之前的末节点指针指向现在实际上的最后一个节点。
之前的pend节点不会丢失。因为有pend-1这个节点的指针域指向他。可以从头结点开始遍历到所有节点的。
你自己做个剪纸。。动态的摆一摆更清楚。
当你输入的值不为0的时候 一直循环 这样pEnd 里面就一直存放新输入的数字,链表最后使用的时候 需要的phead这个头节点的地址。链表里面存的是地址和数据 地址可以相互赋值,怎么会掉呢!
你的提问是什么?