请帮我看个链表算法。谢先!
题目:
以单链表作存储结构实现线性标的就地逆置算法,即在原表的存储空间将线性表(a1,a2,...,an)逆置为(an,an-1,...,a1).
请帮我看看下面的算法是否有错,如果没错,请帮我解释一下while循环中的语句具体如何接成链表的。谢谢先!!!
用单链表作为存储结构
void invert(LinkList L)
{
Node *p, *q, *r;
if(L->next ==NULL) return; /*链表为空*/
p=L->next;
q=p->next;
p->next=NULL; /* 摘下第一个结点,生成初始逆置表 */
while(q!=NULL) /* 从第二个结点起依次头插入当前逆置表 */
{r=q->next;
q->next=L->next;
L->next=q;
q=r;
}
}