链表逆置

好些时间没有搞数据结构了,昨天下午老师让我么写个单链表的逆置,当时做了几到都没有测试过;晚上耍去了……今天上午又做了一到过了,

这次感觉比较有意义,对内存上的分配更加清新了;上课没听老师讲好像记得他用的两个指针,我写的时候用了四个指针,

我做的时候在桌面画了一个图,看着这个图写出来的;


主要说下算法:

void Reverse(List Head)
{
	List pTwo,pMid,JIE,Haha;    //JIE Haha用于中转用的
	pTwo=Head->pNext;     //pTwo指向头结点的下一个节点
	pMid=pTwo->pNext;     //指向pTwo下一个节点
	pTwo->pNext=NULL;
	while(pMid!=NULL)
	{
		Haha=pMid;
		JIE=pMid->pNext;
		pMid->pNext=pTwo;
		Head->pNext=pMid;
		pTwo=Haha;
		pMid=JIE;
	}
}

说这个算法之前要先搞清楚一个地方:之前生成的节点的内存地址是固定不变的,我们只是改变了这个节点中的数据(指针域),使其在遍历时顺序变一下而已,而其本身的地址没变,

算法思路是这样的:把第二个节点(pTwo下一个节点)插到Head节点的后一个位置——>把第三个节点插到Head节点的后一个位置——>第四个...知道插完;

再解释一下上面代码的实现过程:

将pMid指向的节点的指针域指向pTwo,把Head的指针域指向pMid这样就完成了一个元素的插入,

下面我们要把此时的pMid赋值给pTwo(赋值的是本身地址而不是数据(指针域));

这里的pMid应该往下面继续走,但是前面:将pMid指向的节点的指针域指向pTwo,这里就造成了走不动的现象了;

所以要用一个中转指针来储存原先pMid的地址,所以中转指针Haha JIE就起到了一系列的中转作用;

看这个代码然后自己画一下图就懂了;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值