leetcode: Reorder List

来源:互联网 发布:微信点赞软件下载 编辑:程序博客网 时间:2024/06/06 14:22

Given a singly linked list LL0L1→…→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:    ListNode *reverseList( ListNode *head){        if( head == NULL || head->next == NULL)            return head;        ListNode *p = reverseList( head->next);        head->next->next = head;        head->next = NULL;        return p;    }    void reorderList(ListNode *head) {        if( head == NULL || head->next == NULL)            return;        ListNode *p = head;        ListNode *q = head->next;        while( q && q->next){            p = p->next;            q = q->next->next;        }        q = head;        ListNode *head2 = p->next;        head2 = reverseList(head2);        p->next = NULL;        p = head2;        ListNode *tmp = NULL;        while(p && q){            tmp = q->next;            q->next = p;            q = tmp;            tmp = p->next;            p->next = q;            p = tmp;        }    }};


0 0
原创粉丝点击