单链表反转面试题

来源:互联网 发布:centos软件安装卸载 编辑:程序博客网 时间:2024/05/02 01:26

记得这是我实习面试以来碰到的第一道题,大概是两年前了。连年过去了,虽然是一个简单的题目,但是发现自己的总是容易晕,许多细节也会出错,在此总结一下


ListNode *reverse(ListNode *head)

{
if(head==NULL||head->next==NULL)
return NULL;
ListNode *p=head;
ListNode *q=p->next;
ListNode *temp;

while(q!=NULL)
{
    temp=q->next;  ////////此处我出现了问题,以为把q保存下来 写成了temp=q,以后q变化就跟temp没关系了,这样想就错了,以后的q变化了,temp也会跟着变,因此此处要把q->next保存下来
     q->next=p;
p=q;
q=temp;
 
}

head->next=NULL;////////需要想到的是虽然p是指向head,head变,p变化,但是p变化,head却不会变化。

head=p;     //////////此处我又翻了一个很严重的错误,写成了head=q,看看循环里面当去q!=NULL,q又被赋予了temp的值,此时为NULL,显然p才是最后一个而不是q

return head;

}
0 0
原创粉丝点击