leetcode Reorder List
2014-04-12 20:16
330 查看
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
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}.
#include <iostream> using namespace std; /** * Definition for singly-linked list.*/ struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; void print(ListNode * head) { while(head != NULL) { cout << head->val << " "; head = head->next; } cout << endl; } class Solution { public: //先将中心节点以后的节点倒序然后进行插入 //如 L1 L2 L3 L4 L5 // L1 L2 L3 L5 L4 // L1 L5 L2 L4 L3 void reorderList(ListNode *head) { if(head == NULL || head->next == NULL || head->next->next == NULL) return; ListNode *midIterator = head; ListNode *tailIterator = head->next; while(tailIterator != NULL && tailIterator->next != NULL) { midIterator = midIterator->next; tailIterator = tailIterator->next->next; } ListNode * rightiterator = midIterator->next->next; midIterator->next->next = NULL; ListNode * tempiterator = NULL; while(rightiterator != NULL) { tempiterator = rightiterator; rightiterator = rightiterator->next; tempiterator->next = midIterator->next; midIterator->next = tempiterator; } ListNode * leftiterator = head; rightiterator = midIterator->next; while (1) { tempiterator = rightiterator; rightiterator = rightiterator->next; tempiterator->next = leftiterator->next; leftiterator->next = tempiterator; leftiterator = leftiterator->next->next; if(leftiterator == midIterator) break; } midIterator->next = rightiterator; if(rightiterator != NULL) rightiterator->next = NULL; } }; int main() { ListNode a(1); ListNode b(2); ListNode c(3); ListNode d(4); ListNode e(5); a.next = &b; b.next = &c; c.next = &d; d.next = &e; e.next = NULL; ListNode *head = &a; Solution s; s.reorderList(head); print(head); return 0; }
相关文章推荐
- Leetcode#143 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-链表重排序-链表和栈的应用
- Reorder List LeetCode
- LeetCode: Reorder List
- leetcode - Reorder List
- leetcode之Reorder List
- Leetcode NO.143 Reorder List
- leetcode 146: Reorder List
- LeetCode | Reorder List(链表重新排序)
- leetcode--Reorder List
- LeetCode(143) Reorder List