Node<int>* rearrange(Node<int> *head){
// Write your code here
if(head == NULL){
return NULL;
}
else if(head->next == NULL){
return head;
}
Node<int> *fast = head;
Node<int> *slow = head;
while(fast == NULL && fast->next == NULL){
fast = fast->next->next;
slow = slow->next;
}
Node<int> *head2 = slow->next;
slow->next = NULL;
Node<int> *head1 = head;
//reverse 2nd ll
Node<int> *curr = head2;
Node<int> *n;
Node<int> *prev = NULL;
while(curr!=NULL){
n = curr->next;
curr->next = prev;
prev = curr;
curr = n;
}
head2 = prev;
//merge
Node<int> *temp_head = NULL;
Node<int> *temp = temp_head;
while(head1 || head2){
if(head1){
temp->next = head1;
temp = temp->next;
head1 = head1->next;
}
if(head2){
temp->next = head2;
temp = temp->next;
head2 = head2->next;
}
}
temp_head->next = temp;
return temp;
}
Tm9kZTxpbnQ+KiByZWFycmFuZ2UoTm9kZTxpbnQ+ICpoZWFkKXsKCS8vIFdyaXRlIHlvdXIgY29kZSBoZXJlCiAgICBpZihoZWFkID09IE5VTEwpewogICAgICAgIHJldHVybiBOVUxMOwogICAgfQogICAgZWxzZSBpZihoZWFkLT5uZXh0ID09IE5VTEwpewogICAgICAgIHJldHVybiBoZWFkOwogICAgfQogICAgTm9kZTxpbnQ+ICpmYXN0ID0gaGVhZDsKICAgIE5vZGU8aW50PiAqc2xvdyA9IGhlYWQ7CiAgICB3aGlsZShmYXN0ID09IE5VTEwgJiYgZmFzdC0+bmV4dCA9PSBOVUxMKXsKICAgICAgICBmYXN0ID0gZmFzdC0+bmV4dC0+bmV4dDsKICAgICAgICBzbG93ID0gc2xvdy0+bmV4dDsKICAgIH0KICAgIE5vZGU8aW50PiAqaGVhZDIgPSBzbG93LT5uZXh0OwogICAgc2xvdy0+bmV4dCA9IE5VTEw7CiAgICAgTm9kZTxpbnQ+ICpoZWFkMSA9IGhlYWQ7CiAgICAvL3JldmVyc2UgMm5kIGxsCiAgICBOb2RlPGludD4gKmN1cnIgPSBoZWFkMjsKICAgIE5vZGU8aW50PiAqbjsKICAgIE5vZGU8aW50PiAqcHJldiA9IE5VTEw7CiAgICB3aGlsZShjdXJyIT1OVUxMKXsKICAgICAgICBuID0gY3Vyci0+bmV4dDsKICAgICAgICBjdXJyLT5uZXh0ID0gcHJldjsKICAgICAJcHJldiA9IGN1cnI7CiAgICAgICAgY3VyciA9IG47CiAgICB9CiAgICBoZWFkMiA9IHByZXY7CiAgICAvL21lcmdlCiAgICBOb2RlPGludD4gKnRlbXBfaGVhZCA9IE5VTEw7CiAgICBOb2RlPGludD4gKnRlbXAgPSB0ZW1wX2hlYWQ7CiAgICB3aGlsZShoZWFkMSB8fCBoZWFkMil7CiAgICAgICAgaWYoaGVhZDEpewogICAgICAgICAgICB0ZW1wLT5uZXh0ID0gaGVhZDE7CiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgICAgICAgICBoZWFkMSA9IGhlYWQxLT5uZXh0OwogICAgICAgIH0KICAgICAgICBpZihoZWFkMil7CiAgICAgICAgICAgIHRlbXAtPm5leHQgPSBoZWFkMjsKICAgICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgICAgICAgIGhlYWQyID0gaGVhZDItPm5leHQ7CiAgICAgICAgfQogICAgfQogICAJdGVtcF9oZWFkLT5uZXh0ID0gdGVtcDsKICAgIHJldHVybiB0ZW1wOwp9