NC2 재배열 연결리스트


실시예 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:转换为两个链表

рекомендация

отblog.csdn.net/qq_52605986/article/details/121479137