单链表的逆置,帮我解释一下这个算法,void reverse (LinkList &L) //单链表的逆置{\x05LinkList a,b,c;a=L;b=L->next ;\x05while (b->next =NULL)\x05{\x05\x05c=b->next ;\x05\x05b->next =a;\x05\x05a=b;\x05\x05b=c;\x05}\x05b->next =a;\x05L-

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/08 16:40:14

单链表的逆置,帮我解释一下这个算法,
void reverse (LinkList &L) //单链表的逆置
{
\x05LinkList a,b,c;
a=L;b=L->next ;
\x05while (b->next =NULL)
\x05{
\x05\x05c=b->next ;
\x05\x05b->next =a;
\x05\x05a=b;
\x05\x05b=c;
\x05}
\x05b->next =a;
\x05L->next ->next =NULL;
\x05L->next=b;
} 看不懂

void reverse (LinkList &L) //单链表的逆置
{
\x09LinkList a,b,c;
a=L;b=L->next ; // L为头结点
\x09while (b->next !=NULL) // 主要思想就在这了,从第一个结点开始,只要
\x09{ 它的下一个结点不为NULL,则将 ->next反
\x09\x09c=b->next ; 向,先将->next保存,再反指
\x09\x09b->next =a;
\x09\x09a=b; // 这两名循环上面
\x09\x09b=c;
\x09}
\x09b->next =a; // ->next为空的话,由于后面没了,直接反向
\x09L->next ->next =NULL; // L->next此时指向的是反向前的第一个结点,反向后这个结点改为指向 NULL, 即收尾
\x09L->next=b; //头结点指向第一个结点
}
//描述的可能不是很清楚,你画个链表图的话应该有助于理解