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 に配置し、2 つのポインターを使用してノードを文字列化できます。

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