Leetcode: Reorder List
2013-11-03 22:10
316 查看
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}.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { if(head==NULL || head->next==NULL) return head; ListNode* tmphead = reverseList(head->next); head->next->next = head; head->next = NULL; return tmphead; } 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 || head->next==NULL) return; ListNode* pslow = head; ListNode* pfast = head; while(pfast!=NULL) { if(pfast != NULL) pfast = pfast->next; if(pfast != NULL) pfast = pfast->next; if(pfast==NULL) break; pslow = pslow->next; } ListNode* head2 = pslow->next; pslow->next = NULL; head2 = reverseList(head2); ListNode* p1 = head; ListNode* p2 = head2; ListNode* tmp = NULL; while(p1!=NULL && p2 != NULL){ tmp = p1->next; p1->next = p2; p1 = tmp; tmp = p2->next; p2->next = p1; p2 = tmp; } } };
相关文章推荐
- LeetCode Reorder List
- leetcode笔记--Reorder List
- Leetcode: Reorder List && Summary: Reverse a LinkedList
- LeetCode--Reorder List
- [leetcode]Reorder List
- LeetCode - Reorder List
- Reorder List ---LeetCode
- 【leetcode】【单链表】【143】Reorder List
- LeetCode(143) Reorder List
- LeetCode - Reorder List
- leetcode--Reorder List
- [leetcode]Reorder List @ Python
- leetcode之Reorder List
- LeetCode-Reorder List
- LeetCode Reorder List
- LeetCode 9 Reorder List
- leetcode笔记:Reorder List
- 【Leetcode】Reorder List
- Leetcode154: Reorder List
- leetCode刷题Reorder_list (快速求出链表的中间结点——快慢指针方法)