给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
/**
* 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<>();
ListNode node = head;
while(node!=null){
list.add(node);
node = node.next;
}
int i=0;
int j=list.size()-1;
while(i<j){
list.get(i).next = list.get(j);
i++;
if(i==j)
break;
list.get(j).next = list.get(i);
j--;
}
list.get(i).next = null;
}
}