class Solution { public void reorderList(ListNode head) { if(head == null || head.next == null || head.next.next == null) return; ListNode mid = findMid(head); // 找到中间节点 ListNode node2 = mid.next; mid.next = null; merge(head,reverse(node2)); // 翻转后面一段链表,并与前一段链表合并 } public ListNode findMid(ListNode head) { ListNode fast = head, slow = head; while(fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } return slow; } public ListNode reverse(ListNode head) { if(head == null || head.next == null) return head; ListNode node = reverse(head.next); head.next.next = head; head.next = null; return node; } public ListNode merge(ListNode node1,ListNode node2) { if(node1 == null) return node2; if(node2 == null) return node1; ListNode next = node1.next; node1.next = node2; node2.next = merge(next,node2.next); return node1; } }