C/C++_单链的快速逆置

单链的快速逆置

1.首先我们应建立一个链表:

struct list{
	int data;
	list* next;
	};
这里用图解给出所建立的链表

然后用一个空的节点来指向我们链表的头结点,这个新节点存放

的数据为空,引用这个空节点来方便对后面的倒置进行操作

2.接下来是对链的倒置.

对每个元素来说,对应next的成员所存放的地址应该转移到原先链的下下一个元素的next中去,这样就完成了下下一个节点的逆置,
那么对应原先的链,我们应该从链首元素的上上一个元素所对应的next成员来找到链首的next成员的数值.而我们的链首元素的上上
一个元素不存在,所以我们将NULL赋值给首元素,而每次在赋值之前,我们应该将现有元素的next成员的值用一个中间变量保存起来
从而方便接下来的赋值操作.
在知道了如何进行转换之后,就可以写出如下代码:

list* x = NULL;        // 每次用来存储现有元素的NEXT的值
list* p = NEW->next;   // 用来遍历原来的链
list* y;	       // 用来存放下一个要逆置的元素的首地址
while ( p ){           // 对循环进行判断,只要p不为空,就会对进行下一次逆置
	y = p->next;   // 先存好下一个要逆置的元素的首地址
	p->next = x;   // 改变现有元素的next成员
	x = p;         //存放下下一个元素的首地址,在下一次循环中赋值给对应元素的next成员
	p = y;	       // 跟新循环判断条件并指向向下一个要逆置的元素
}
NEW->next = x;         // 要注意在完成逆置之后要将NEW元素的next改成逆置前的链的末元素的首地址
这样我们就完成了整个单链的快速逆置,只进行了一些地址的交换,而并没有繁琐的运算



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值