您的位置:首页 > 其它

【leetcode】Reorder List

2014-07-21 22:19 483 查看
链接:https://oj.leetcode.com/problems/reorder-list/

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}
.
方法:
将链表分成两部分,然后将后面一个链表反转,最后重组链表。

void reorderList(ListNode *head) {
if(head == NULL ||
head->next == NULL ||
head->next->next == NULL)
return;

ListNode dumy(-1);
dumy.next = head;
ListNode *first = &dumy;
ListNode *second = &dumy;

while(first->next != NULL && first->next->next != NULL)
{
second = second->next;
first = first->next->next;
}
if(first->next)
{
first = first->next;
second = second->next;
}

ListNode dumy2(-1);
dumy2.next = second->next;
second->next = NULL;
second = dumy2.next;

// reverse the second List
ListNode *pre = second;
ListNode *cur = second->next;
while(cur)
{
pre->next = cur->next;
cur->next = dumy2.next;
dumy2.next = cur;
cur = pre->next;
}

//reorder
ListNode *p1 = dumy.next;
ListNode *p2 = dumy2.next;
while(p2)
{
dumy2.next = p2->next;
p2->next = p1->next;
p1->next = p2;
p1 = p2->next;
p2 = dumy2.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: