二十一のタイトル20200323題し毎日の仕事

/ **
*タイトル:チェックリストの特定の値によっては、小さなに分割し、中間、大きな右フォームに等しい左
*
:*要件
次に、*ノードの所定のヘッドウェイリンクリストの最初のノードは、整数値タイプであります整数privot与えられます。実装
リンクされたリストを調整する*関数を、リンクされたリストは、左側部分に調整されているより少ないノードprivotの値より、中間部分が等しいprivotである
*ノードは、ノードprivotの右側部分よりも大きいです。この要件に加えて、調整ノードの順序のためのより多くの要件は存在しません。
*たとえば、次のリスト9-> 0-> 4-> 5-> 1、privot = 3。リスト1-> 0-> 4-> 9-> 5に調整することができる、それがあってもよい
* 0-> 1-> 9-> 5> 4。要するに、ノードの一部は小3の左千ある満たすために、中央部分がノード3に等しく、右の部分である
*ノードが3よりも大きくすることができます。内部ノードの順序の一部に必要とされません。
*
*分析:
*ソリューション時間複雑度はO(N)であり、追加の空間の複雑さはO(N)、リンクされたリスト内のすべてのノードが正面にある
アレイ*外し、その後均一な調整の位置を計測します。次のように具体的なプロセスである:
* 1再度リストの長さがNであると仮定すると、長さを得るためにリストを横断します
* 2は、その後、順次nodeArrrayにノードのリンクリストをトラバース、ノード長N型アレイnodeArrを生成します。
*以下、よりprivotの左側のノードで3 nodeArrayは、中央、右のより大きいを置くために等しいです。
*長いnodeArrayによってノードと、ステップ3、被験者の要件を満たすためnodeAn-ノード順序の調整後4
全体処理を終了する*再接続時間まで。
*
* @Author雪の瞳
*
* /

パブリッククラスノード{ 
	公共のint値。
	次のパブリック・ノード。
	パブリック・ノード(intデータ){ 
		this.valueデータを=。
	} 
}

  

{クラスListPartパブリック
	
	プライベート・ノード現在; //現在のノード
	のプライベートINT nodeLength = 0; //鎖長
	プライベート・ノードnodeArray [] = NULL; // リストアレイ
	プライベートINT iは= 0; //ループ変数
	プライベートINTをcurrentValueは= 0。ノードの//現在値
	
	公衆listPartノード(ノードヘッド、int型privot){ 
		IF(ヘッド== NULL){ 
			戻りヘッド; 
		} 
		//リストの長さの取得
		、電流=ヘッド
		ながら(!電流= NULL){ 
			nodeLength ++と、
			電流=電流.next; 
		} 
		//リスト配列の内容書き込み
		; nodeArrayノード新しい新しい= [nodeLength】
		電流=ヘッドと、
		一方(I <nodeLength){ 
			nodeArray [I] =現在; 
			I ++; 
			現在= current.next; 
		}
		//排序
		int型の小= -1; 
		int型の大= nodeArray.length。
		int型のインデックス= 0; 
		一方、(インデックス=大きい!){ 
			 currentValueは= nodeArray [インデックス] .VALUE。
			IF(currentValueは<privot){ 
				swapElements(nodeArray、++小さなインデックス++)。
			}そうであれば(currentValueは> privot){ 
				swapElements(nodeArray、--big、インデックス)
			}他{ 
				インデックス++; 
			} 
		} 
		//重新连接链表
		ため(I = 1; I = nodeLength;!私++){ 
			nodeArray [I-1] .next = nodeArray [I]。
		} 
		nodeArray [nodeLength-1] .next = NULL; 
		ヘッド= nodeArray [0]。
		頭を返します。
	} 
	
	//数值交换函数
	公共ボイドswapElements(ノードnodeArray []、INT A、INT b)は{
		
		ノードtranElements = NULL; 
		tranElements nodeArray = [B]。
		nodeArray [B] = nodeArray [A]。
		nodeArray [A] = tranElements。
	}	 
}

  

import java.util.Random;
import java.util.Scanner;

public class TestListPart {
	public static void main(String[] args) {
		ListPart list = new ListPart();
		TestListPart test = new TestListPart();
		//获取初始信息
		Random rand = new Random();	
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入链表长度");
		int K = sc.nextInt();
		System.out.println("请输入位置元素值");
		int privot = sc.nextInt();
		//随机生成链表
		Node nodes[]=new Node[K];
		for(int i=0;i<nodes.length;i++) {
			nodes[i]=new Node(rand.nextInt(20)+1);
		}
		for(int i =0;i<nodes.length-1;i++) {
			nodes[i].next=nodes[i+1];
		}
		Node head = nodes[0];
		//test
		test.showNode(head);
		Node partNode = list.listPart(head, privot);
		test.showNode(partNode);
		
	}
	public void showNode(Node head) {
		System.out.println("链表内的元素如下所示...");
		while(head != null) {
			System.out.print(head.value+"\t");
			head = head.next;
		}
		System.out.println();
	}
}

  

* 运行结果

 

 

おすすめ

転載: www.cnblogs.com/walxt/p/12551712.html