如何对链表进行从新排序

"""
给定链表L0->L1->L2...Ln-1->Ln, 把链表从新排序为L0->Ln->L1->Ln-1->L2...。要求:(1)在原来链表的基础上进行排序,既不能申请新的结点;(2)只能修改结点的next域,不能修改数据域
"""


class LNode:
    def __init__(self):
        self.data = None
        self.next = None


def FindMiddleNode(head):
    '''
    方法功能:找到链表Head中间结点,把链表从中间断成两个子链表
    :param head: 链表头结点
    :return: 链表中间结点
    '''

    if head is None or head.next is None:
        return head

    fast = head  # 遍历链表的时候每次向前走2步
    slow = head  # 遍历链表的时候每次向前走1步
    slowPre = head
    # 当fast到链表尾时候,slow刚好指向链表的中间结点
    while fast is not None and fast.next is not None:
        slowPre = slow
        slow = slow.next
        fast = fast.next.next
    # 把链表断开成两个独立的子链表
    slowPre.next = None
    return slow


def Reverse(head):
    '''
    方法功能:对不带头结点的单链表翻转
    :param head: 链表头结点
    :return:
    '''

    if head is None or head.next is None:
        return head

    pre = head  # 前驱结点
    cur = head.next  # 当前结点
    next = cur.next  # 后继结点
    pre.next = None
    # 使当前遍历到的结点cur指向其前驱结点
    while cur is not None:
        next = cur.next
        cur.next = pre
        pre = cur
        cur = next
    return pre


def Recorder(head):
    '''
    方法功能:对链表进行拍戏
    :param head: 链表头结点
    :return:
    '''

    if head is None or head.next is None:
        return

    # 前半部分链表第一个结点
    cur1 = head.next
    mid = FindMiddleNode(head.next)
    # 后半部分链表逆序后的第一个结点
    cur2 = Reverse(mid)
    tmp = None
    # 合并两个链表
    while cur1.next is not None:
        tmp = cur1.next
        cur1.next = cur2
        cur1 = tmp
        tmp = cur2.next
        cur2.next = cur1
        cur2 = tmp
    cur1.next = cur2


if __name__ == '__main__':
    i = 1
    head = LNode()
    tmp = None
    cur = head
    # 构造第一个列表
    while i < 8:
        tmp = LNode()
        tmp.data = i
        cur.next = tmp
        cur = tmp
        i += 1

    print('排序前:')
    cur = head.next
    while cur is not None:
        print(cur.data, end=' ')
        cur = cur.next

    Recorder(head)
    print('\n排序后')
    cur = head.next
    while cur is not None:
        print(cur.data, end=' ')
        cur = cur.next

运行结果以下:
排序前:
1 2 3 4 5 6 7
排序后
1 7 2 6 3 5 4web