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;

    }

};

 

你可能感兴趣的:(order)