My c++ solution for \u3010Reorder List\u3011AC within 72ms
class Solution {\n    public:\n        void reorderList(ListNode *head) {\n    \t\tif (!head) return;\n    \t\tListNode dummy(-1);\n    \t\tdummy.next = head;\n
    class Solution {\n    public:\n        void reorderList(ListNode *head) {\n    \t\tif (!head) return;\n    \t\tListNode dummy(-1);\n    \t\tdummy.next = head;\n    \t\tListNode *p1 = &dummy, *p2 = &dummy;\n    \t\tfor (; p2 && p2->next; p1 = p1->next, p2 = p2->next->next);\n    \t\tfor ( ListNode *prev = p1, *curr = p1->next; curr && curr->next; ){\n    \t\t\tListNode *tmp = curr->next;\n    \t\t\tcurr->next = curr->next->next;\n    \t\t\ttmp->next = prev->next;\n    \t\t\tprev->next = tmp;\n    \t\t}\n    \t\tfor ( p2 = p1->next, p1->next = NULL,p1 = head; p2; ){\n    \t\t\tListNode *tmp = p1->next;\n    \t\t\tp1->next = p2;\n    \t\t\tp2 = p2->next;\n    \t\t\tp1->next->next = tmp;\n    \t\t\tp1 = tmp;\n    \t\t}\n        }\n    };\n\n\n\nStep1. get the mid Node of the list\n\nStep2. reverse the second half list \n\nStep3. merge the two half lists\n\n**Clean & Concise is better**
['Linked List', 'C++']