Reorder List

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}.

本题 O(n)空间时间做完,但实际有O(1)的做法。

那个办法是把后半部分翻转,然后merge一下就可以了。

/**
 * 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) {
        stack<ListNode *> sk;
        if(head == NULL)return;
        int num=1;
        ListNode *temp = head;
        while(temp ->next != NULL)
        {
            sk.push(temp->next);
            temp =temp->next;
            num++;
        }
        temp = head;
        if(num<3)return;
        for(int i = 0 ; i  < num/2 ;i++)
        {
            ListNode *last =sk.top();
            sk.pop();
            if(!sk.empty()){
                ListNode *n = sk.top();
                n->next =NULL;
            }
            
            last->next = temp->next;
            temp->next = last;
            temp = last->next;
        }
    }
};

  

原文地址:https://www.cnblogs.com/pengyu2003/p/3625858.html