反转链表

函数功能:实现链表的反转。

   思路:我们在对当前结点作修改时,一定要考虑会不会影响别的结点。如果会,我们就要做出相应的保存。


  比如在我们销毁链表时,


 Node*  p=head;

  while(p)

  {

      Node *q=p->next;     //因为如果我们单纯的销毁p时会丢失它下一个结点。

                                       //所以我们要把p->next 保存下来。

      delete p;

       p=q;

  }


下面的函数也是一样的,如果 我们执行pNode->next=pre时,没有在之前   写上pNext=pNode->next;   这样就会丢失信息。先有一个简单的思路,不要去想实现所有的细节,要有大体的思路。



函数实现:

void reserve(Node * &head)
{
    if(!head)
    return 0;
    Node *pre=NULL;
    Node *pNode=head;
    while(pNode)
    {
        //我们用两个指针可以完成对链表的反转,
        //只是中间需要有一个临时变量。
        Node *pNext=pNode->next;
        //这个一定要保存下来,因为修改链接后就找不到next了
        pNode->next=pre;
        
        pre=pNode;
        pNode=pNext;
    }
    head=pre;    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值