//heada 头指针 ,pa 前驱节点,pb后驱节点
void ReverseAList(Node *heada,NOde *Listc){
Node *pa = heada->next;
Node *pb = pa->next;
pa->next = null;
Node *pc = pb;
while(pb) {
//一个头指针来指向新的节点,一个移动指针pb指向 当前指向 发生变化的,一个后继指针保存后继节点,也就是剩余链表的头节点
pc = pb->next;
pb->next = pheada->next;
pheada->next = pb; //让新的头指针 指向当下节点
pb = pc;
}
}
代码如上:
下面是讨论
指针不过是一个数值而已,所以头结点的位置可以任意赋值和改变,不过在逆置过程要注意保存链表的完整性;
类比头插法,我有个朋友常常想到开辟新的空间来存储一个新的链表,但是新的链表除了有一个新的头指针,方法与逆置过程没什么不同。在草稿纸上跟着代码模拟一下过程马上就熟悉了。
所以在遍历操作过程常常要定义四个指针变量:1.新链表的头指针2遍历的指针cursor3.遍历指针的后继节点(保证待逆置的链表头结点不丢失)4.遍历指针的前继(这里和头指针的指向一样)