题目链接

/**
 * 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)
        {
            return head;
        }
        ListNode *tail = head;
        head=head->next;
        tail->next = NULL;
        while(head!=NULL)
        {
            ListNode *temp = head->next;
            head->next = tail;
            tail = head;
            head =  temp;
        }
        return tail;



    }
    void reorderList(ListNode *head) {
        if(head==NULL||head->next==NULL||head->next->next==NULL)
        {
            return ;
        } //用快慢指针判断长度为偶数还是奇数,并找出中间元素
        ListNode *slow = head;
        ListNode *fast = head;
        while(fast->next!=NULL&&fast->next->next!=NULL)
        {
            fast=fast->next->next;
            slow=slow->next;
        }
        ListNode *mid = slow->next;
        slow->next=NULL;
        ListNode *newHead = reverseList(mid);
 //通过翻转第二个矩阵获得的头结点作为新的节点

        while(newHead!=NULL)
        {
            ListNode *temp = newHead->next;
            newHead->next = head->next;
            head->next = newHead;
            head = newHead->next;
            newHead = temp;

        }

    }
};

关于reverse
图片说明
关于最后merge链表
图片说明