/**

  • Definition for singly-linked list.

  • class ListNode {

  • int val;
    
  • ListNode next;
    
  • ListNode(int x) {
    
  •     val = x;
    
  •     next = null;
    
  • }
    
  • } */ public class Solution { public void reorderList(ListNode head) { if(head == null || head.next == null) return; ListNode mid = getMid(head); ListNode midNext = mid.next; mid.next = null;//将原来的链表断成两条链表 //使用头插法翻转后半部分链表 ListNode prev = null; ListNode cur = midNext; while(cur != null){ ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } ListNode node = head; //合并链表 while(node != null && prev != null){ ListNode n1 = node.next; ListNode n2 = prev.next; node.next = prev; prev.next = n1; node = n1; prev = n2; }

    } //使用快慢指针找到中间结点位置 public ListNode getMid(ListNode head){ ListNode slow = head; ListNode fast = head; while(fast.next != null && fast.next.next != null){ slow = slow.next; fast = fast.next.next; } return slow; } }