실시예 1
输入:
{
1,2,3,4}
返回值:
{
1,4,2,3}
说明:
给定head链表1->2->3->4, 重新排列为 1->4->2->3,会取head链表里面的值打印输出 1
실시예 2
输入:
{
1,2,3,4,5}
返回值:
{
1,5,2,4,3}
说明:
给定head链表1->2->3->4->5, 重新排列为 1->5>2->4->3,会取head链表里面的值打印输出
연결리스트는 배열처럼 직접 접근할 수 없기 때문에 데이터에 접근할 때마다 처음부터 접근해야 하므로 시간이 더 많이 걸린다.
방법 1 : 선형 목록: ArrayList의 맨 아래 레이어는 배열로 구현됩니다. 연결 목록의 모든 노드를 ArrayList에 넣고 두 개의 포인터를 사용하여 노드를 함께 묶을 수 있습니다.
public void reorderList(ListNode head){
if(head == null)return;
ArrayList<ListNode> arrayList=new ArrayList<>();
//把链表中的节点录入ArrayList
while(head.next != null){
arrayList.add(head);
}
//定义两个指针
int i=0,j=arrayList.size()-1;
//将节点串起来
while(i>j){
if(i==j)return;
arrayList.get(i).next=arrayList.get(j);
i++;
arrayList.get(j).next=arrayList.get(i);
j++;
}
//把最后一个节点指向null
arrayList.get(i).next=null;
}
方法2:转换为两个链表