两种while情况不一样,导致结果不一致…下面有附带调试过程…
由于在这里不能贴图...链接到了http://d.download.csdn.net/down/999625/hangyu628
Node* Reverse(Node* head) //
{
Node *p,*q;
p=head->next;
head->next=NULL;
//调试过程: 会出现异常,具体调试过程如下图
// while (p!=NULL)
// {
// p->next=head->next; //第一步时,p有值,p->next也有值
// head->next=p; //第二步时,p->next指向NULL,p->next后面的值也未知了
// p=p->next; //第三步时,跟上面一样,都是无值,
// }
//而下面的情况(正常)...p整个链表保留下来了.只有q在变化...所以正常..
//不懂调试的话可以联系本人
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
return head;
}
分析上面过程:首先,在while之前,p是第一个结点(head不算),head->next=NULL。
假设有如下结点:Headàq1àq2àq3……..
p=p->next;作用仅是换下个结点而已
整个循环过程:
第一次:本来是HeadàNULL,q1àq2 变成headàq1à NULL;
第二次:变成 headàq2àq1àNULL;
.......