核心代码:
①pTail->next = pNew;
②pNew->next = NULL;
③pTail = pNew;
设结构体名称为 struct ST;
注:方框代表分配的内存空间,椭圆代表结构体内部定义的指针,单箭头表示复制给指向部分,双箭头代表地址指向的内存空间。
链表链接可以分为图示两大部分:
一.首节点指向第二个节点
pHead = (struct ST *)malloc(struct ST);
pTail = pHead;
pHead指向已分配的内存空间,将pHead保存的地址复制给pTail,则pTail与pHead指向相同的内存空间;
pNew = (struct ST *)malloc(struct ST);
pNew指向新的内从空间;
pTail->next = pNew;
将pNew保存的内存地址复制给pTail->next,则pTail->next指向pNew相同的内存空间。
pNew->next = NULL;
新开辟的内存空间中保存的内存地址指向空;
pTail = pNew;
将pNew保存的地址复制给pTail,则1号线断开,pTail沿2号线指向新的内存空间。
整个过程下来,pNew失去作用,用作下一次分配空间。
二.除首节点之外的节点连接
经过第一步操作,pTail指向第二个节点且第二个节点内保存的指针指向空;
pNew = (struct ST *)malloc(struct ST);分配新的内存空间;
通过pTail->next = pNew;将第二个节点的指针指向pNew指向的内存空间,即方向3换为4;
然后再通过pNew->next = NULL;将新节点中的指针指向空;
通过pTail = pNew;将pTail再次指向新开辟的内存空间,即方向5换为6;
这样一来,pTail就始终指向最后一个节点,pNew不断用来存放新申请空间的地址,然后在不断被替代,形成节点环环相扣。
(个人见解,如有不到之处欢迎指正。)