/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *listSplit(ListNode *list)
{
ListNode *fakehead = new ListNode(0);
fakehead->next = list;
ListNode *slow, *fast;
slow = fakehead; fast = fakehead;
while (fast->next != NULL && fast->next->next != NULL)
{
slow = slow->next;
fast = fast->next;
fast = fast->next;
}
if (fast->next)
{
slow = slow->next;
fast = fast->next;
}
ListNode *tmp;
tmp = slow->next;
slow->next = NULL;
return tmp;
}
ListNode *listReverse(ListNode *list)
{
if (list == NULL)
return NULL;
ListNode *p;
p = list->next;
list->next = NULL;
while (p)
{
ListNode *tmp = p;
p = p->next;
tmp->next = list;
list = tmp;
}
return list;
}
void listMerge(ListNode *list1, ListNode *list2)
{
while (list2)
{
ListNode *tmp = list2;
list2 = list2->next;
tmp->next = list1->next;
list1->next = tmp;
list1 = list1->next;
list1 = list1->next;
}
}
void reorderList(ListNode *head)
{
if (head == NULL)
return;
ListNode *p1, *p2;
p1=head;
p2 = listSplit(head);
p2 = listReverse(p2);
listMerge(p1, p2);
}
};
【LeetCode】Reorder List
最新推荐文章于 2020-07-18 13:27:31 发布