给定一个单链表 L
的头节点 head
,单链表 L
表示为:
L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4] 输出:[1,4,2,3]
示例 2:
输入:head = [1,2,3,4,5] 输出:[1,5,2,4,3]
提示:
- 链表的长度范围为
[1, 5 * 104]
1 <= node.val <= 1000
-
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int val=0, ListNode next=null) { * this.val = val; * this.next = next; * } * } */ public class Solution { public void ReorderList(ListNode head) {if (head == null) { return; } ListNode fast = head,slow = head; while(fast.next!=null&&fast.next.next!=null){ fast = fast.next.next; slow = slow.next; } ListNode rightHead = slow.next; ListNode prev = null, curr = rightHead; slow.next = null; while(curr!=null){ ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; } ListNode node1 = head,node2 =prev; while(node1!=null&&node2!=null){ ListNode temp1 = node1.next,temp2 = node2.next; node1.next = node2; node1 = temp1; node2.next = node1; node2 = temp2; } } }