/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode * reverse( ListNode * root )
{
if( nullptr==root || nullptr==root->next )
{
return root;
}
ListNode * sentry=nullptr;
while( nullptr!=root )
{
ListNode * temp=root->next;
root->next=sentry;
sentry=root;
root=temp;
}
return sentry;
}
class Solution {
public:
void reorderList(ListNode *head) {
if( nullptr==head || nullptr==(head->next) )
{
return ;
}
ListNode * low=head;
ListNode * fast=head;
while( 1 )
{
fast=fast->next;
if( nullptr==fast ) break;
fast=fast->next;
if( nullptr==fast ) break;
low=low->next;
}
ListNode * first=head;
ListNode * ttt=low->next;
low->next=nullptr;
ListNode * second=reverse( ttt );
ListNode * sentry=new ListNode(-1);
ListNode * temp=sentry;
while( nullptr!=first && nullptr!=second )
{
sentry->next=first;
sentry=sentry->next;
//sentry->next=nullptr;
first=first->next;
sentry->next=second;
sentry=sentry->next;
//sentry->next=nullptr;
second=second->next;
}
if( nullptr!=first )
{
sentry->next=first;
sentry=sentry->next;
sentry->next=nullptr;
}
head=temp->next;
delete temp;
return;
}
};