【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
方法:
将链表分成两部分,然后将后面一个链表反转,最后重组链表。
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; } }
相关文章推荐
- leetcode 146: Reorder List
- LeetCode | Reorder List(链表重新排序)
- leetcode_143_Reorder List
- leetcode-Reorder List
- [LeetCode] Reorder List
- LeetCode Reorder List
- [LeetCode]Reorder List
- Leetcode Reorder List
- LeetCode (Reorder List)
- 【Leetcode】【Medium】Reorder List
- [LeetCode] Reorder List 反向插入链表
- Reorder List -- LeetCode
- 【LeetCode】Reorder List 解题报告
- [Leetcode] Reorder List
- [Leetcode]Reorder List
- LeetCode 143 Reorder List
- LeetCode刷题笔录 Reorder List
- LeetCode No.143 Reorder List
- [leetcode] Reorder List
- Reorder List --LeetCode