思路:
分三步: 1. 找到中点. 2. 把中点后面的链表反转. 3. 合并两个新产生的链表即可.
void reorderList(ListNode* head) {
if (! head || ! head->next)
return;
ListNode* temp1 = head, *temp2 = head->next;
while (temp2 && temp2->next) {
temp1 = temp1->next;
temp2 = temp2->next->next;
}
ListNode* next = temp1->next;
temp1->next = NULL;
temp1 = next;
temp2 = NULL;
while (temp1) {
next = temp1->next;
temp1->next = temp2;
temp2 = temp1;
temp1 = next;
}
temp1 = head;
while (temp2) {
next = temp1->next;
temp1->next = temp2;
temp1 = temp1->next;
temp2 = next;
}
}