[LeetCode]Reorder List
2013-11-20 14:04
399 查看
/** * 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) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if(head == NULL) return; int listLen = getListLen(head); ListNode* head1 = NULL; ListNode* head2 = NULL; divideList(head, listLen, head1, head2); head2 = reverseList(head2); mergeList(head1, head2); } private: void divideList(ListNode* head, int listLen, ListNode*& head1, ListNode*& head2) { int firstHalfLen = (listLen+1)/2; head1 = head; ListNode* pFirstHalf = head; for(int k = 1; k < firstHalfLen; ++k) pFirstHalf = pFirstHalf->next; head2 = pFirstHalf->next; pFirstHalf->next = NULL; } ListNode* reverseList(ListNode* head) { if(head == NULL) return head; ListNode dummy(-1); ListNode* prev = &dummy; prev->next = head; ListNode* reverseHead = head; ListNode* reverseTail = head; ListNode* cur = head->next; while(cur) { reverseTail->next = cur->next; prev->next = cur; cur->next = reverseHead; reverseHead = cur; cur = reverseTail->next; } return dummy.next; } void mergeList(ListNode* head1, ListNode* head2) { ListNode dummy(-1); ListNode* prev = &dummy; while(head1 || head2) { prev->next = head1; head1 = head1->next; prev = prev->next; prev->next = head2; if(head2) { head2 = head2->next; prev = prev->next; } } } int getListLen(ListNode* head) { int len = 0; while(head) { len++; head = head->next; } return len; } };
相关文章推荐
- [leetcode] Reorder List
- [leetcode]Reorder List
- LeetCode之Reorder List
- LeetCode: Reorder List
- 【LeetCode】Reorder List
- leetcode - Reorder List
- leetcode之Reorder List
- [Leetcode]#143 Reorder List
- LeetCode---Reorder List
- leetcode:Reorder List
- Reorder List[LeetCode]
- [LeetCode] Reorder List, Solution
- [LeetCode] Reorder List
- leetcode: Reorder List
- LeetCode之Reorder List
- Leetcode: Reorder List
- 【leetcode】Reorder List (middle)
- Reorder List [LeetCode]
- leetcode. Reorder List
- [leetcode-143]Reorder List(c)