60_leetcode_Reorder List
2014-06-20 07:41
295 查看
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:将链表分成两部分;对第二部分进行发转;2:交叉合并两个链表
ListNode *sortList(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* slowNode = head;
ListNode* fastNode = head->next;
while(fastNode && fastNode->next)
{
slowNode = slowNode->next;
fastNode = fastNode->next->next;
}
ListNode* firstNode = head;
ListNode* secondNode = slowNode->next;
slowNode->next = NULL;
firstNode = sortList(firstNode);
secondNode = sortList(secondNode);
head = mergeTwoList(firstNode, secondNode);
return head;
}
ListNode* mergeTwoList(ListNode* head1, ListNode* head2)
{
ListNode* newHead = NULL;
ListNode *index = NULL;
while(head1 && head2)
{
if(head1->val <= head2->val)
{
if(newHead == NULL)
{
newHead = head1;
index = newHead;
}
else
{
index->next = head1;
index = index->next;
}
head1 = head1->next;
}
else
{
if(newHead == NULL)
{
newHead = head2;
index = newHead;
}
else
{
index->next = head2;
index = index->next;
}
head2 = head2->next;
}
}
index->next = (head1 == NULL ? head2 : head1);
return newHead;
}
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:特殊情况;2:将链表分成两部分;对第二部分进行发转;2:交叉合并两个链表
ListNode *sortList(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* slowNode = head;
ListNode* fastNode = head->next;
while(fastNode && fastNode->next)
{
slowNode = slowNode->next;
fastNode = fastNode->next->next;
}
ListNode* firstNode = head;
ListNode* secondNode = slowNode->next;
slowNode->next = NULL;
firstNode = sortList(firstNode);
secondNode = sortList(secondNode);
head = mergeTwoList(firstNode, secondNode);
return head;
}
ListNode* mergeTwoList(ListNode* head1, ListNode* head2)
{
ListNode* newHead = NULL;
ListNode *index = NULL;
while(head1 && head2)
{
if(head1->val <= head2->val)
{
if(newHead == NULL)
{
newHead = head1;
index = newHead;
}
else
{
index->next = head1;
index = index->next;
}
head1 = head1->next;
}
else
{
if(newHead == NULL)
{
newHead = head2;
index = newHead;
}
else
{
index->next = head2;
index = index->next;
}
head2 = head2->next;
}
}
index->next = (head1 == NULL ? head2 : head1);
return newHead;
}
相关文章推荐
- Reorder List[LeetCode]
- Leetcode Reorder List 链表重排序
- LeetCode | Reorder List
- Reorder List - LeetCode
- LeetCode 143 Reorder List Add to List
- Reorder List leetcode java
- Leetcode: Reorder List
- [C++]LeetCode: 75 Reorder List
- 开始刷leetcode day 16:Reorder List
- Leetcode Reorder List
- 【leetcode】Reorder List
- 【Leetcode】Reorder List
- LeetCode Reorder List
- leetcode. Reorder List
- LeetCode:Reorder List
- LeetCode:Reorder List
- LeetCode: Reorder List
- LeetCode刷题笔录 Reorder List
- 【Leetcode】Reorder List
- LeetCode:Reorder List