LeetCode: Reorder List
2014-08-12 14:25
253 查看
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
Round 2:
class Solution {
public:
void reorderList(ListNode *head) {
int size = 0;
ListNode *iter = head, *rhead = head, *pre = NULL, *next = NULL;
while(iter)
{
iter = iter->next;
size++;
}
int mid = 0;
iter = head;
while(mid < size/2)
{
if(mid == size/2-1)
{
rhead = iter->next;
iter->next = NULL;
}
iter = iter->next;
mid++;
}
while(rhead != NULL)
{
next = rhead->next;
rhead->next = pre;
pre = rhead;
rhead = next;
}
iter = head;
rhead = pre;
while(iter != NULL)
{
next = iter->next;
if(next == NULL)
next = rhead->next;
iter->next = rhead;
rhead = rhead->next;
iter->next->next = next;
iter = next;
}
}
};
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: void reorderList(ListNode *head) { int count =0; ListNode* half = head; ListNode* itr = head; while(itr) { count++; itr = itr->next; } itr = head; if(count == 0 || count == 1 || count == 2) return; for(int i = 0; i < count/2; i++) { itr = half; half = half->next; } itr->next = NULL; ListNode* pre = NULL; ListNode* cur = half; while(cur) { ListNode* next = cur->next; cur->next = pre; pre = cur; cur = next; } half = pre; itr = head; while(itr && half) { ListNode* h_next = itr->next; ListNode* e_next = half->next; if(h_next) half->next = itr->next; itr->next = half; itr = h_next; half = e_next; } } };
Round 2:
class Solution {
public:
void reorderList(ListNode *head) {
int size = 0;
ListNode *iter = head, *rhead = head, *pre = NULL, *next = NULL;
while(iter)
{
iter = iter->next;
size++;
}
int mid = 0;
iter = head;
while(mid < size/2)
{
if(mid == size/2-1)
{
rhead = iter->next;
iter->next = NULL;
}
iter = iter->next;
mid++;
}
while(rhead != NULL)
{
next = rhead->next;
rhead->next = pre;
pre = rhead;
rhead = next;
}
iter = head;
rhead = pre;
while(iter != NULL)
{
next = iter->next;
if(next == NULL)
next = rhead->next;
iter->next = rhead;
rhead = rhead->next;
iter->next->next = next;
iter = next;
}
}
};
相关文章推荐
- leetcode--Reorder List
- Reorder List - Leetcode
- LeetCode-Reorder List
- Reorder List leetcode java
- [leetcode]Reorder List
- Reorder List @LeetCode
- 《leetCode》:Reorder List
- leetcode Reorder List
- LeetCode143 Reorder List
- leetcode143~Reorder List
- ]Leetcode]-[Reorder List ]-三种解法
- [LeetCode 143] Reorder List Solution
- LeetCode解题报告:Reorder List
- [LeetCode] 重排链表 reorder linked list
- Leetcode -- Reorder List
- Leetcode--Reorder List
- [LeetCode]Reorder List
- leetcode第143题 ( Reorder List),快慢指针的应用
- LeetCode 143: Reorder List
- [leetcode] Reorder List