给定一个单链表 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]
思路
将链表转化为线性表。再对线性表进行重排操作
class Solution {
public void reorderList(ListNode head) {
if(head==null) return;
List<ListNode> a=new ArrayList<ListNode>(); //创建线性表
ListNode t=head;
while(t!=null){ //将每个节点存储进线性表中
a.add(t);
t=t.next;
}
int i=0,j=a.size()-1;
while(i<j){
a.get(i).next=a.get(j);
i++;
if(i>=j) break;
a.get(j).next=a.get(i);
j--;
}
a.get(i).next=null;
}
}