方法一 哈希表+双指针
/**
* 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) {
List<ListNode> list = new ArrayList<>();
ListNode node = head;
//将链表放进数组
while(node != null) {
list.add(node);
node = node.next;
}
int l = 1;
int r = list.size() - 1;
ListNode p = head;
while(l <= r) {
p.next = list.get(r);
p = p.next;
p.next = list.get(l);
p = p.next;
l++;
r--;
//当l==r的时候左右指针只用加一次
if(l == r) {
p.next = list.get(r);
p = p.next;
}
}
if(p != null) {
p.next = null;//防止出现环形链表
}
}
}