赞
踩
对于这样的链表,进行反转,我们首先考虑用两个指针的方法
此时,我们令p1=head;p1->next=p2;
然后,我们试着去反转的时候,令p1->next=NULL;p2->next=p1;可是在这个时候,p2->next指向了p1,找不到下一个节点了,也就是说,链子在这里断掉了,而如果想让链子不断,我们可以想到,定义一个p3,使p3等于p2->next,这样,我们可以令p1=p2;p2=p3;而p3本来就连接着后面的节点,令p3=p3->next就可以了。
那么,当我们理清这个思路的时候,我们可以看出来,p3只是起到一个好像路标一样的作用,在反转的过程中,一直是将p2->next指向到p1,那么判定结束必须要p2->next=NULL;才行。
实际执行中,我们如果让p1=head的时候,我们要判定p1->next不是空指针,还要判断p2->next不是空指针,有点麻烦,可以先让p1=NULL,在循环中完成使head->next=NULL,充分利用循环。
- struct ListNode* reverseList(struct ListNode* head)
- {
- struct ListNode* p1=NULL;
- if(!head)
- {
- return NULL;
- }
- struct ListNode*p2=head;
- struct ListNode*p3=p2->next;
- while(p2)
- {
- p2->next=p1;
- p1=p2;
- p2=p3;
- if(p3)
- {
- p3=p3->next;
- }
- }
- return p1;
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。