数据结构之单链表的就地逆置(方法一:三指针法)

【问题分析】单链表的逆置就是将表中内容由原来的(a1,a2,a3,...,an)转换为(an,an-1,...a3,a2,a1)。就地逆置就是不需要额外的申请结点空间,只需要利用原有的表中的结点空间。

上图中第一个链表就是原有的带头结点初始链表,第二条链表为逆置后的链表。在解决链表的问题中,画图是一个重要的解决问题的手段。

【解答一】:三指针法

    

第一步:定义三个指针 pre,s,p,并将其初始化pre=NULL,s=NULL,p=head->next,然后判断p是否为空。

第二步:将p赋给s,即s=p;

第三步:指针p向后移动;

第四步:将pre的值赋给s->next

第五步:pre=s;

以下是执行一次五个步骤的图示 

#include<assert.h> 

void  ReverseList(LinkList head)

{

       assert(head);

       ListNode*pre=NULL,*s=NULL;

       ListNode*p=head->next;

      while(p!=NULL)

      {

           s=p;

           p=p->next;

           s->next=pre;

           pre=s;

       }

       head->next=pre;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十七^O^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值