回 帖 发 新 帖 刷新版面

主题:一段小算法代码

设计一个算法,利用栈来实现带头结点的单链表h的逆序。
解:假设链栈不带头结点,先将单链表的所有数据结点(除头结点*h外)依次进栈,然后依次出栈,将出栈的结点链接到单链表h的末尾。算法如下:
  void rever(SNode *&h)
{
     SNode *st=NULL,*p=h->next,*q,*r;
     while(p!=NULL)
     {
        q=p->next;
        p->next=st;  //将p结点进栈
        st=p;
        p=q;
     }
     r=h;      //的始终指向新建单链表的尾结点
     while(st!=NULL) //栈不空时循环
     {        //出栈结点*p
        p=st;
        st=st->next;
        r->next=p;
        r=p;
      }
      r->next=NULL;
}
哪位能帮小生详细注释下,最好用点图示,这段代码实在有点晦涩。它到底是如何实现逆序的呢?

回复列表 (共2个回复)

沙发

逆序干什么用?用双向链表不是更好,STL里面的list就是现成的很好的双向链表,很好用

板凳


就是让指针的方向变一下就可以了嘛 

可以自己画图试试呀

加油——

我来回复

您尚未登录,请登录后再回复。点此登录或注册