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}
.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution
{
public:
void reorderList(ListNode *head)
{
if(head== NULL || head->next==NULL)
return;
ListNode* temp = head;
vector<ListNode*> res;
while(temp!=NULL)
{
res.push_back(temp);
temp = temp->next;
}
int n = res.size()-1;
int low = 0;
int high = n;
while(low<high)
{
res[low]->next = res[high];
res[high]->next = res[low+1];
low++;
high--;
}
res[low]->next = NULL;
head = res[0];
}
};
还可以通过链表直接改进空间复杂度降为常数