您的位置:首页 > 其它

[Leetcode 143, Medium] Reorder List

2015-07-26 10:25 501 查看
Problem:

iven 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
{1,2,3,4}
, reorder it to
{1,4,2,3}
.
Analysis:

Solutions:

C++:

void reorderList(ListNode* head) 
    {
        if(head == NULL || head->next == NULL || head->next->next == NULL)
            return;
        
        ListNode *fast = head;
        ListNode *slow = head;
        while(fast->next != NULL && fast->next->next != NULL) {
            fast = fast->next;
            fast = fast->next;
            slow = slow->next;
        }
        
        ListNode *temp_head = slow->next;
        slow->next = NULL;
        ListNode *new_head = NULL;
        ListNode *p_cur = NULL;
        while(temp_head != NULL) {
            ListNode *temp = temp_head->next;
            if(p_cur == NULL) {
                new_head = temp_head;
                p_cur = temp_head;
                p_cur->next = NULL;
            } else {
                new_head = temp_head;
                temp_head->next = p_cur;
                p_cur = new_head;
            }
            temp_head = temp;
        }
        
        ListNode *r_head = NULL;
        p_cur = NULL;
        while(head != NULL) {
            if(head && head->next == NULL && new_head == NULL) {
                p_cur->next = head;
                p_cur->next->next = NULL;
                break;
            }
            ListNode *temp1 = head->next;
            ListNode *temp2 = new_head->next;
            if(p_cur == NULL) {
                r_head = head;
                r_head->next = new_head;
                r_head->next->next = NULL;
                p_cur = r_head->next;
            } else {
                p_cur->next = head;
                p_cur->next->next = new_head;
                p_cur->next->next->next = NULL;
                p_cur = p_cur->next->next;
            }
            head = temp1;
            new_head = temp2;
        }
        head = r_head;
    }
Java:

Python:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: