解法一:数组
完整遍历链表,用数组存储每个结点的信息。然后从后往前,将后一半的结点插入目标位置,最后将新的尾结点的 next
指针设为 null
。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public void reorderList(ListNode head) {
if (head == null) {
return;
}
List<ListNode> list = new ArrayList<>();
for (ListNode p = head; p != null; p = p.next) {
list.add(p);
}
ListNode left = head;
ListNode right = head.next;
int len = list.size();
for (int i = len - 1; i >= (len + 1) / 2; --i) {
left.next = list.get(i);
list.get(i).next = right;
left = right;
right = right.next;
//System.out.println(left.val);
//System.out.println(right.val);
}
if ((len & 1) == 1){
left.next = null;
} else {
right.next = null;
}
}
}