【Leetcode】【Medium】Reorder List
2015-05-19 05:07
288 查看
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
解题思路:
设置一个指针mid指向链表的中间结点;
将mid之后的半个链表进行反转,反转后的链表insert;
将insert中的结点挨个插入前半段链表中;
代码:
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}.
解题思路:
设置一个指针mid指向链表的中间结点;
将mid之后的半个链表进行反转,反转后的链表insert;
将insert中的结点挨个插入前半段链表中;
代码:
/** * 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 || !head->next || !head->next->next) return; ListNode* ctrl = head; ListNode* mid = head; ListNode* insert = NULL; while (ctrl->next && ctrl->next->next) { ctrl = ctrl->next->next; mid = mid->next; } insert = reverseList(mid->next); mid->next = NULL; ctrl = head; while (insert) { ListNode* t = ctrl->next; ctrl->next = insert; insert = insert->next; ctrl->next->next = t; ctrl = t; } return; } ListNode* reverseList(ListNode* head) { if (!head->next) return head; ListNode* cur = NULL; ListNode* next = head; ListNode* left = NULL; while (next) { left = next->next; next->next = cur; cur = next; next = left; } return cur; } };
相关文章推荐
- [Leetcode 143, Medium] Reorder List
- 143.leetcode Reorder List (medium)[链表调整]
- leetcode 之Reorder List(25)
- Leetcode--Reorder List
- [LeetCode]Reorder List
- LeetCode(143) Reorder List
- Leetcode: Reorder List
- Leetcode: Reorder List
- 【LeetCode with Python】 Reorder List
- 【leetcode】Reorder List
- leetcode--Reorder List
- leetcode-Reorder List-143
- LeetCode---Reorder List
- leetCode No.143 Reorder List
- LeetCode题解–143. Reorder List
- [C++]LeetCode: 75 Reorder List
- LeetCode - Reorder List
- leetcode---Reorder List
- 【leetcode】【单链表】【143】Reorder List
- LeetCode(143) Reorder List