主题:一段小算法代码
设计一个算法,利用栈来实现带头结点的单链表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;
}
哪位能帮小生详细注释下,最好用点图示,这段代码实在有点晦涩。它到底是如何实现逆序的呢?
解:假设链栈不带头结点,先将单链表的所有数据结点(除头结点*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;
}
哪位能帮小生详细注释下,最好用点图示,这段代码实在有点晦涩。它到底是如何实现逆序的呢?