用图介绍有头单链表的头插法逆置

头插法逆置

请先看代码:

void Reverse(List plist)//逆置
{
	assert(plist != NULL);
	Node *p, *q;
	p = plist->next;
	plist->next = NULL;
	while (p != NULL)
	{
		q = p;
		p = p->next;
		q->next = plist->next;
		plist->next = q;
	}
}

看代码可能看不懂,请跟着我的图走一遍

假设,111,666,333,444,888为五个节点的地址,其中头节点为111

第一步:p = plist->next;//让p指向666所在的地址

 plist->next = NULL;是的111(plist)与后面断开

第二部:第一次循环
        q = p;//定义p到q的位置


        p = p->next;//把p挪到它指向的下一个位置


        q->next = plist->next;//把q打断,让它变成一个孤立节点


        plist->next = q;再把q这个单个节点接在plist上

这样就完成一次循环了,可能你还没看懂,但是请再看一个循环你就一定会明白;

第三步:第二次循环

  q = p;//定义p到q的位置

p = p->next;//把p挪到它指向的下一个位置

q->next = plist->next;//让他指向p->list

plist->next = q;再把q这个单个节点接在plist上

整理:

这下你对比这张图和第一张图就发现前两个已经成功逆置(头节点不逆置)

这样多循环几次就可以完全逆置了。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值