Reorder List Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes’ values. For example, Given {1,2,3,4}, reorder it to {1,4,2,3} void reorderList(ListNode* head) { //思路:首先获取链表的后部分链表,然后将后部分链表一一插入到前部分,最后返回 if(NULL == head || NULL == head->next || NULL == head->next->next) { return ; } //获取链表的中间节点的后一个节点 ListNode* slow = head; ListNode* fast = head; while(fast) { fast = fast->next; if(fast) { slow = slow->next; fast = fast->next; } } fast = slow->next; //链表的中间节点的后一个节点 slow->next = NULL; //以下部分是将链表的后半部分进行倒置 ListNode* p = fast; ListNode* q = fast->next;//最初忽略了后半部分的最后一个节点的next要设置为NULL,倒置一开始提交时总是出错!!! fast->next = NULL; while(q) { ListNode* temp = q->next; q->next = p; p = q; q = temp; } //以下部分是将倒置的后半部分依次插入前半部分中去 q = head;//q设置为前半部分的head,p是后半部分的head cout<<"p->val"<<endl; while(p && q) { ListNode* tempp = p->next; ListNode* tempq = q->next; p->next = q->next; q->next = p; q = tempq; p = tempp; } }