赞
踩
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
class Solution { public: void reorderList(ListNode* head) { ListNode *head1=head,*temp=head; int num=0,flag; while(temp)num++,temp=temp->next; flag=num%2,num/=2; for(int i=0;i<num;i++)head1=head1->next; if(head1&&head1->next){//将后半部分逆序 ListNode *pre=head1,*now=head1->next,*next=head1->next->next; head1->next=NULL; while(now){ now->next=pre; pre=now,now=next; if(next)next=next->next; } head1=pre; } while(head&&head1&&head->next&&head1->next){ ListNode* p=head,*p1=head1; head=head->next; head1=head1->next; p->next=p1,p1->next=head; } if(flag&&head&&head->next)head->next->next=NULL; else if(head)head->next=head1,head1->next=NULL; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。