空间复杂度O(1),情况下逆置单链表,和头插法的比较

 //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.遍历指针的前继(这里和头指针的指向一样)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值