Josephu問題-上——創建環形鏈表

import java.util.Scanner;
class Person{
	int no;
	Person nextPerson = null;
	public Person(int no){
		this.no = no;
	}
}
class CycleLink{
	Person firstPerson = null; //指向鏈表第一個小孩的引用
	int len; 
	Person temp = null;
			//設定鏈表長度
	public void setLen(int len){
		this.len = len;
	}
			//創建鏈表
	public void createLink(){
		for(int i=1; i<=len; i++){
			Person p = new Person(i);
				//環鏈的第一個對象
			if(i==1){
				this.firstPerson = p;	//將第一個對象的引用存放在firstPerson中
				this.temp = p;	//將第一個對象的引用暫時賦於temp,用於接收下一個對象的引用
			}
				//環鏈的最後一個對象
			else if(i==len){
				this.temp.nextPerson = p;	//將最後一個對象的引用賦給倒數第二個對象的nextPerson
				temp = p;		//將當前對象(也就是最後一個對象)的引用暫賦給temp
				temp.nextPerson = this.firstPerson;	//將第一個對象的引用賦給最後一個對象的nextPerson
				
			}else{
				this.temp.nextPerson = p;//將當前對象的引用賦給上一個對象的引用變量nextPerson中
				this.temp = p;	//將當前對象的引用暫時賦於temp,用於接收下一個對象的引用
			}
		}
	}
			//打印環形鏈表
	public void showLink(){
		Person t = firstPerson;	
		do{
			System.out.println(t.no);
			t = t.nextPerson; /*前一個對象的nextPerson存放的下一個對象的引用
							  (因爲對象也是引用類型,相當於是引用的引用)*/
		}while(t!=firstPerson);
	}
}
public class CycleLinkTest{

	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		System.out.print("請輸入環形鏈表的長度:");
		CycleLink t = new CycleLink();
		t.setLen(input.nextInt());	//給定環形鏈表的長度
		t.createLink();	//創建環鏈
		t.showLink(); //測試環鏈是否創建成功
	}
 }
 /*************************
 請輸入環形鏈表的長度:6
1
2
3
4
5
6
 *************************/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章