反转链表

来源:互联网 发布:淘宝搜索词指数查询 编辑:程序博客网 时间:2024/06/12 02:57

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

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


  比如在我们销毁链表时,


 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;    
}

0 0
原创粉丝点击