方法1 一次AC了
class Solution {
public:
void reorderList(ListNode* head) {
if (head == NULL || head->next == NULL || head->next->next == NULL)
{
return;
}
ListNode* slow = head;
ListNode* fast = head->next;
while (fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
}
ListNode* sec = reverse(slow->next);1
//这一段merge two linked list 可以优化
while (head != slow)
{
ListNode* temp1 = head->next;
head->next = sec;
ListNode* temp2 = sec->next;
sec->next = temp1;
head = temp1;
sec = temp2;
}
head->next = sec;
}
ListNode* reverse(ListNode* node)
{
ListNode* prev = NULL;
while (node != NULL)
{
ListNode* temp = node->next;
node->next = prev;
prev = node;
node = temp;
}
return prev;
}
};
优化 merge two linked list的部分 这个方法真是brilliant啊 可以节省不少中间变量我是没有想到 略巧妙啊!