题目:
思路:双指针
- 由于链表没有索引,所以使用List先将节点依次装入;
- 根据题目要求的顺序,想到双指针 ! i 为最左, j 为最右,每次用 i 指向 j ,即为题目顺序!
指针 i 和 j 每次同时向中间移动,直到 i > j 则停止;
但是每一轮还需要将 j 指向 i+1,以连接本轮的 j 和下一轮的 i; - 注意:最后以一定要让末尾节点指向 null,否则会成环!
由于每一轮最后 i++, j-- ,所以末尾元素的索引是 i 而不是 j;
class Solution {
public void reorderList(ListNode head) {
ArrayList<ListNode> list=new ArrayList<>();
ListNode curr=head;
// 存
while(curr!=null){
list.add(curr);
curr=curr.next;
}
// 双指针!
int i=0;
int j=list.size()-1;
// 修改
while(i<j){
list.get(i).next=list.get(j);
if(i+1<j){
list.get(j).next=list.get(i+1);
}
i++;
j--;
}
// 最后要将i指针的元素指向null !!! 否则成环!
list.get(i).next=null;
}
}