带头节点单链表逆置,根据殷人昆老师算法改写

LinkList reverse_01(LinkList& l)//
{
	LinkList k = l;
	LinkList pr;//p记录pr的后面节点,pr是首元节点
	LinkList p = l->next;//p记录pr的后面节点
	LinkList rear = p;//rear记录逆置前第一个数据元素,逆置后变为最后一个
	free(k);
	pr = NULL;
	while (p)//	while (p)
	{
		l->next = pr;//逆置
		pr = l; l = p; p = p->next;//所有指针后移一个位置
	}
	l->next = pr;	//p==NULL此时h停留在最后一个节点
	LinkList q = new LNode; q->next = l;//解决了头节点的问题

	rear->next = NULL;rear记录逆置前第一个数据元素,逆置后变为最后一个,最后指针域赋为空值,表示后面不再有节点
	return q;

}
LinkList reverse_02(LinkList& l)
{
	LinkList p = l->next;
	LinkList pre = NULL;//记录前驱
	LinkList s = NULL;//用于记录p
	while (p)
	{
		s = p;
		p = p->next;
		s->next = pre;
		pre = s;
	}
	l->next = pre;//pre停留在最后一个节点
	return l;
}

反思:

(1)一定要画图,进行过程分析

(2)尾指针的用法

(3)前驱指针,记录或跟踪指针,后继指针

(4)工作指针后移,指针后移位置经常用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值