题目:
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}.
分析:
1。遍历交叉。每次计算出该提起的node的位置,遍历到那里,然后改变指针的指向。代码1就是这个思路,显然不大靠谱,复杂度是O(n^2),leetcode是过不了的。
代码1:
void reorderList(ListNode* head)
{
if(head == NULL)
return;
ListNode* l1 = head;
ListNode* l;
ListNode* l2;
int place= 1;
int times = 0;
int len = 0;
while(l1)
{
len ++;
l1 = l1->next;
}
len = len -1;
if(len == 0 || len == 1)
{
return;
}
l1 = head;
while(l1 && place <= len)
{
l = l1->next;
times = len - place;
l2 = l;
while(times != 0)
{
times = times -1;
l2 = l2->next;
}
l1->next = l2;
l2->next = l;
l1 = l;
place = place + 1;
len = len -1;
}
l1->next = NULL;
return ;
}