leetcode第143题 ( Reorder List),快慢指针的应用
2016-10-27 20:14
537 查看
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
代码如下:
void reorderList(ListNode* head) {
// cut list 1->2->3->4->5 ==> list1:1->2 list2:3->4->5
ListNode *fast = head, *slow = nullptr;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow == nullptr ? head : slow->next;
}
if (slow == nullptr) return;
ListNode *head2 = slow->next;
slow->next = nullptr;
// reverse list2 3->4->5 ==> 5->4->3
slow = fast = head2;
head2 = nullptr;
while (fast != nullptr) {
fast = fast->next;
slow->next = head2;
head2 = slow;
slow = fast;
}
// merge two list list1:1->2 list2:5->4->3 ==> 1->5->2->4->3
slow = fast = head;
while (fast != nullptr && head2 != nullptr) {
fast = fast->next;
slow->next = head2;
head2 = head2->next;
slow->next->next = fast ? fast : head2;
slow = fast;
}
}
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) {
// cut list 1->2->3->4->5 ==> list1:1->2 list2:3->4->5
ListNode *fast = head, *slow = nullptr;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow == nullptr ? head : slow->next;
}
if (slow == nullptr) return;
ListNode *head2 = slow->next;
slow->next = nullptr;
// reverse list2 3->4->5 ==> 5->4->3
slow = fast = head2;
head2 = nullptr;
while (fast != nullptr) {
fast = fast->next;
slow->next = head2;
head2 = slow;
slow = fast;
}
// merge two list list1:1->2 list2:5->4->3 ==> 1->5->2->4->3
slow = fast = head;
while (fast != nullptr && head2 != nullptr) {
fast = fast->next;
slow->next = head2;
head2 = head2->next;
slow->next->next = fast ? fast : head2;
slow = fast;
}
}
相关文章推荐
- LeetCode 143 Reorder List (链表 Map或快慢指针 推荐)
- LeetCode-Reorder List-链表重排序-链表和栈的应用
- leetcode:Reorder List (修改链表排列不改变值) 【面试算法题】
- Reorder List 链表首尾交叉排列@LeetCode
- 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
- [LeetCode] Reorder List, Solution
- LeetCode 之 Reorder List
- Leetcode: Reorder List
- [LeetCode] Reorder List
- LeetCode:Reorder List C++与Java实现