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
*************************/
Josephu問題-上——創建環形鏈表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.