关于C++反向链表的详解

来源:百度知道 编辑:UC知道 时间:2024/07/07 03:49:32
template <class Type>
void List<Type>::Invert()
{
ListNode<Type> *p = first, *q = 0;//first是链表的头节点
while(p){
ListNode<Type> *r = q;
q = p;
p = p->link;
q->link = r;
}
first = q;
}
假设现在链是a->b->c的样子
那么开始r和q都是空的;
从a开始,所以p指向a,
操作a,所以q指向了a,为了不丢失b和b后面的链,把p指向了b
这时将a的下一个指向r

这最后一句a指向r怎么解释啊不能理解
q->link = r;意思是头指针指向r怎么会变成a指向r呢

总共4句:
r=q;
q=p;
p=p->link;
q->link=r;
前三句分别将指向的位置往后移一位,第四句将节点的连接反向,下一次循环时继续这个步骤。刚开始时r是空的,但循环时r的值是随着q改变的。