1. 程式人生 > >LeetCode 143. Reorder List

LeetCode 143. Reorder List

truct link lin pub des str sin {} ast

Given a singly linked list L: L0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-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: void reorderList(ListNode *head) { if (!head || !head->next || !head->next->next) return; ListNode *fast = head; ListNode *slow = head; while (fast->next && fast->next->next) { slow = slow->next; fast
= fast->next->next; } ListNode *mid = slow->next; slow->next = NULL; ListNode *curr = mid; ListNode *prev = NULL; while(curr) { ListNode *tmp = curr->next; curr->next = prev; prev = curr; curr
= tmp; } while(head && prev) { ListNode *next = head->next; head->next = prev; prev = prev->next; head->next->next = next; head = next; } } };

LeetCode 143. Reorder List