/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *reverse_list(struct ListNode * head)
{
if(head==NULL || head->next==NULL) return head;
struct ListNode *pre=NULL;
struct ListNode *cur=head;
struct ListNode *Next=NULL;
while(cur)
{
Next=cur->next;
cur->next=pre;
pre=cur;
cur=Next;
}
return pre;
}
void reorderList(struct ListNode* head) {
struct ListNode *new_head=NULL;
struct ListNode *new_node=NULL;
struct ListNode *node=head;
if(head==NULL || head->next==NULL) return ;
struct ListNode *slow=head;
struct ListNode *fast=head;
//find the middle nodes
while(fast->next!=NULL && fast->next->next!=NULL)
{
slow=slow->next;
fast=fast->next->next;
}
new_head=slow->next;
slow->next=NULL;
//revert the 2nd linklist
new_node=reverse_list(new_head);
//merge 2 link list together
node=head;
int index=0;
while(new_node!=NULL && node!=NULL)
{
if((index % 2)==0)
{
struct ListNode *Next = node->next;
node->next=new_node;
node=Next;
}
else
{
struct ListNode *Next=new_node->next;
new_node->next=node;
new_node=Next;
}
index++;
}
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *reverse_list(struct ListNode * head)
{
if(head==NULL || head->next==NULL) return head;
struct ListNode *pre=NULL;
struct ListNode *cur=head;
struct ListNode *Next=NULL;
while(cur)
{
Next=cur->next;
cur->next=pre;
pre=cur;
cur=Next;
}
return pre;
}
void reorderList(struct ListNode* head) {
struct ListNode *new_head=NULL;
struct ListNode *new_node=NULL;
struct ListNode *node=head;
if(head==NULL || head->next==NULL) return ;
struct ListNode *slow=head;
struct ListNode *fast=head->next->next;
//find the middle nodes
while(fast!=NULL && fast->next!=NULL)
{
slow=slow->next;
fast=fast->next->next;
}
if(fast!=NULL) slow=slow->next;
new_head=slow->next;
slow->next=NULL;
//revert the 2nd linklist
new_node=reverse_list(new_head);
//merge 2 link list together
node=head;
int index=0;
while(new_node!=NULL && node!=NULL)
{
if((index % 2)==0)
{
struct ListNode *Next = node->next;
node->next=new_node;
node=Next;
}
else
{
struct ListNode *Next=new_node->next;
new_node->next=node;
new_node=Next;
}
index++;
}
}