首页 > 代码库 > Reorder List

Reorder List

Given a singly linked list LL0→L1→…→Ln-1→Ln,
reorder it to: L0→LnL1→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) {        deque<ListNode *> pList;        ListNode *pNode=head;        ListNode *pCur=head;        int count=0;        while(pNode!=NULL)        {            pList.push_back(pNode);            pNode=pNode->next;            count++;        }        for(int i=0;i<count/2;i++)        {            ListNode *temp=pList.back();            pList.pop_back();            temp->next=pCur->next;            pCur->next=temp;            pCur=temp->next;        }        if(head!=NULL)            pCur->next=NULL;    }};