# 重排链表

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

 L→ L→ … → Ln-1 → L
请将其重新排列后变为:

L→ L→ L→ Ln-1 → L→ Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 

示例 1:

输入: head = [1,2,3,4]
输出: [1,4,2,3]

示例 2:

输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]

 

提示:

## template ```java public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { public void reorderList(ListNode head) { if (head == null) { return; } ListNode fast = head, slow = head; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } ListNode cur = slow.next, pre = null, next = null; slow.next = null; while (cur != null) { next = cur.next; cur.next = pre; pre = cur; cur = next; } ListNode p1 = head, p2 = pre; while (p1 != null && p2 != null) { next = p2.next; p2.next = p1.next; p1.next = p2; p1 = p2.next; p2 = next; } } } ``` ## 答案 ```java ``` ## 选项 ### A ```java ``` ### B ```java ``` ### C ```java ```