Salinan kode adalah sebagai berikut: Daftar Paket;
impor java.util.arraylist;
/**
* Java Joseph Masalah: n Individu (ID berbeda) membentuk lingkaran, mulai menghitung M (angka apa pun) mulai dari StartID (angka apa pun).
* Mulailah menghitung nomor M dari orang berikutnya, dan menghitung M akan dihapus di akhir antrian baru.
* Cetak antrian baru setelah dihapus
*
* mis
* int n = 10; // Jumlah total orang
* int m = 3; // Laporkan jumlah angka
* int startIndex = 1; // Posisi Mulai
* @Author Hulk 2014 03 20
*
*/
kelas publik josephlisttest {
public static void main (string [] args) {
Long StartTime = System.CurrentTimeMillis ();
Tes josephlisttest = josephlisttest baru ();
int n = 10; // Jumlah total orang
int m = 3; // Laporkan jumlah angka
int startIndex = 12; // Posisi Mulai
System.out.println ("JosephlistTest: n =" + n + ", m =" + m +
", startIndex =" + startIndex + "/n/nqueue hasil:");
ArrayList <Fon> queuelist = test.queuePreson (n, m, startIndex);
untuk (orang orang: queuelist) {
System.out.println ("Out Person:" + Orang);
}
System.out.println ("Gunakan waktu =" +
(System.CurrentTimeMillis () - StartTime));
}
Private ArrayList <Fon> queuepreson (int n, int m, int startIndex) {
ArrayList <Fon> queuelist = null;
Daftar Personlist = CreateList (N);
//list.search ();
if ((list! = null) && (list.head! = null)) {
queuelist = new arraylist <josephlisttest.person> ();
Pnode pnode = list.head;
if (startIndex> 0) {
startIndex = startIndex % n;
pnode = list.getNode (startIndex);
} kalau tidak {
pnode = list.head;
}
Int count = 1;
while (list.size> 0) {
Orang outperson = null;
//menemukan
if (count == (m - 1)) {
// Hapus node berikutnya
Orang prev = pnode.person;
outperson = list.remove (prev);
queuelist.add (outperson);
//System.out.println("out orang: " + outperson +", size = " + list.size);
hitung = 0;
}
pnode = pnode.next;
Count ++;
}
}
kembali queuelist;
}
Private Personlist CreateList (int n) {
Daftar Personlist = new PersonList ();
untuk (int i = 0; i <n; i ++) {
Orang orang = orang baru (i, "name_" + (i + 1));
list.add (i, orang);
}
daftar pengembalian;
}
Public Class PersonList {
Pnode head = null;
ukuran int = 0;
Public PersonList () {
}
Distist publik (orang orang) {
head = pnode baru (orang, kepala);
ukuran ++;
}
Public PersonList (pnode head) {
this.head = head;
head.setNext (head);
ukuran ++;
}
pnode publik gethead () {
Kembali Kepala;
}
public void sethead (pnode head) {
this.head = head;
}
public int getSize () {
ukuran pengembalian;
}
public void setsize (ukuran int) {
this.size = ukuran;
}
ukuran public void (ukuran int) {
this.size = ukuran;
}
public boolean isEmpty () {
kembalikan this.size <= 0;
}
public void inithead (orang orang) {
if (size == 0) {
head = pnode baru (orang, kepala);
} kalau tidak {
Pnode no = head;
head = pnode baru (orang, tidak);
}
ukuran ++;
}
public void add (int index, orang orang) {
if (size == 0) {
head = pnode baru (orang, kepala);
head.setNext (head);
//System.out.println("head: " + head);
} kalau tidak {
if (index <0) {
indeks = 0;
}
if (index> size) {
indeks = ukuran;
}
Pnode no = head;
untuk (int i = 0; i <(indeks - 1); i ++) {
No = No.Next;
}
Pnode newnode = pnode baru (orang, No.Next);
No.Next = newNode;
}
ukuran ++;
}
hapus orang publik (indeks int) {
Pnode pnode = hapus (indeks);
if ((pnode! = null) && (pnode.next! = null)) {
return pnode.next.person;
}
kembali nol;
}
pnode publik hapus (indeks int) {
if (size == 0) {
kembali nol;
} kalau tidak {
if ((index <0) || (index> = size)) {
kembali nol;
}
}
Pnode no = head;
untuk (int i = 0; i <(indeks - 1); i ++) {
No = No.Next;
}
No.Next = No.next.next;
ukuran--;
if ((tidak! = null) && (No.Next! = null)) {
Return No.Next;
}
kembali nol;
}
/**
* Hapus simpul node orang berikutnya, dan kembalikan orang yang dihapus
* @param preperson
* @return orang dihapus
*/
orang publik menghapus (preperson orang) {
if (preperson == null) {
kembali nol;
}
if (size == 0) {
kembali nol;
}
Prenode pnode = head;
int index = -1;
untuk (int i = 0; i <size; i ++) {
if (prenode.person.id == preperson.id) {
indeks = i;
merusak;
} kalau tidak {
prenode = prenode.next;
}
}
Orang remperson = null;
if (size <= 1) {
// Hanya satu node, dapatkan orangnya dan atur sebagai nol
remperson = prenode.Person;
prenode = null;
} kalau tidak {
//prenode.next.person adalah Dest One
remperson = prenode.next.person;
prenode.next = prenode.next.next;
}
ukuran--;
//System.out.println("deleting index = " + index +": " + remperson +", size = " + size);
Return Remperson;
}
Pembaruan Int Publik (Person SRC, Person Dest) {
if (src == null) {
kembali -1;
}
int index = -1;
Pnode no = head;
untuk (int i = 0; i <size; i ++) {
if (src.id == No.Person.id) {
No.Person = Dest;
merusak;
} kalau tidak {
No = No.Next;
}
}
indeks pengembalian;
}
set boolean publik (indeks int, orang orang) {
if (orang == null) {
mengembalikan false;
}
if (size == 0) {
mengembalikan false;
} kalau tidak {
if ((index <0) || (index> = size)) {
mengembalikan false;
}
}
Pnode no = head;
untuk (int i = 0; i <index; i ++) {
No = No.Next;
}
No.Person = orang;
Kembali Benar;
}
orang publik get (int index) {
Pnode no = getNode (index);
if (no! = null) {
Return No.Person;
}
kembali nol;
}
pnode publik getNode (indeks int) {
if (size == 0) {
kembali nol;
} kalau tidak {
if ((index <0) || (index> = size)) {
kembali nol;
}
}
Pnode no = head;
untuk (int i = 0; i <index; i ++) {
No = No.Next;
}
kembali tidak;
}
public void Search () {
int sizelong = ukuran;
Pnode no = head;
untuk (int i = 0; i <sizelong; i ++) {
System.out.println ("Search Index =" + i + "," + no);
No = No.Next;
}
}
}
pnode kelas publik {
Orang;
Pnode next = null;
pnode publik () {
}
pnode publik (orang orang) {
this.person = orang;
}
pnode publik (orang orang, pnode selanjutnya) {
this.person = orang;
this.next = next;
}
@Mengesampingkan
Public String ToString () {
kembalikan "pnode [orang =" + person.id + ", next =" + next.person.id +
"]";
}
orang publik getperson () {
orang yang kembali;
}
public void setperson (orang orang) {
this.person = orang;
}
pnode publik getNext () {
kembali berikutnya;
}
public void setNext (pNode next) {
this.next = next;
}
}
orang kelas publik {
int id = 0;
String name = "";
orang publik () {
}
orang publik (int id, nama string) {
super();
this.id = id;
this.name = name;
}
@Mengesampingkan
Public String ToString () {
kembalikan "orang [id =" + id + ", name =" + name + "]";
}
}
}