/**
-
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; } }