A cópia do código é a seguinte: lista de pacotes;
importar java.util.arraylist;
/**
* Java Joseph Problema: N Indivíduos (IDs diferentes) formam um círculo, comece a contar M (qualquer número) a partir do StartID (qualquer número).
* Em seguida, comece a contar os números M da próxima pessoa, e a contagem de M será retirada no final da nova fila.
* Imprima a nova fila após ser removido
*
* Por exemplo
* int n = 10; // número total de pessoas
* int m = 3;
* int startIndex = 1;
* @Author Hulk 2014 03 20
*
*/
classe pública JosephlistTest {
public static void main (string [] args) {
long startTime = System.currenttimemillis ();
JosephlistTest Test = new JosephlistTest ();
int n = 10;
int m = 3; // Relate o número de números
int startIndex = 12;
System.out.println ("JosephlistTest: n =" + n + ", m =" + m +
", startIndex =" + startIndex + "/n/nQueue resultado:");
ArrayList <Say> Queuelist = test.queuepreson (n, m, startIndex);
para (pessoa da pessoa: Queuelista) {
System.out.println ("Out Pessoa:" + Pessoa);
}
System.out.println ("Use Time =" +
(System.CurrentTimemillis () - StartTime));
}
Private ArrayList <Pesso> QueuePeson (int n, int m, int startIndex) {
Arraylist <Say> Queuelist = NULL;
Pessoal List = CreateList (n);
//list.search ();
if ((list! = null) && (list.head! = null)) {
queuelista = novo ArrayList <JosephlistTest.person> ();
Pnode pnode = list.head;
if (startIndex> 0) {
startIndex = startIndex % n;
pnode = list.getNode (startIndex);
} outro {
pnode = list.head;
}
int count = 1;
while (list.size> 0) {
Pessoa outperson = nulo;
//encontrar
if (count == (m - 1)) {
// Exclua o próximo nó
Pessoa prev = pnode.person;
outPerson = list.Remove (prev);
Queuelist.Add (Outperson);
//System.out.println("out pessoa: " + outperson +", size = " + list.size);
contagem = 0;
}
pnode = pnode.next;
contagem ++;
}
}
retornar queuelista;
}
Pessoa privada CreateList (int n) {
Lista PersonList = new PersonList ();
for (int i = 0; i <n; i ++) {
Pessoa pessoa = nova pessoa (i, "name_" + (i + 1));
list.add (i, pessoa);
}
lista de retorno;
}
classe pública PersonList {
Cabeça pnode = null;
int tamanho = 0;
public PERSOLLIST () {
}
Public Personlist (pessoa da pessoa) {
cabeça = novo pnode (pessoa, cabeça);
tamanho ++;
}
Public PersonList (cabeça de pnode) {
this.head = head;
head.setNext (cabeça);
tamanho ++;
}
public pnode gethead () {
Cabeça de retorno;
}
public void sethead (cabeça pnode) {
this.head = head;
}
public int getSize () {
tamanho de retorno;
}
public void SetSize (int size) {
this.size = size;
}
Tamanho do vazio público (tamanho int) {
this.size = size;
}
public boolean isEmpty () {
return this.size <= 0;
}
public void initead (pessoa de pessoa) {
if (size == 0) {
cabeça = novo pnode (pessoa, cabeça);
} outro {
Pnode no = cabeça;
cabeça = novo pnode (pessoa, não);
}
tamanho ++;
}
public void add (int ndice, pessoa pessoa) {
if (size == 0) {
cabeça = novo pnode (pessoa, cabeça);
head.setNext (cabeça);
//System.out.println("head: " + head);
} outro {
if (índice <0) {
índice = 0;
}
if (índice> tamanho) {
índice = tamanho;
}
Pnode no = cabeça;
for (int i = 0; i <(índice - 1); i ++) {
Não = No.Next;
}
Pnode newNode = new pnode (pessoa, No.Next);
No.Next = newNode;
}
tamanho ++;
}
Pessoa pública Delete (Int Index) {
Pnode pnode = remover (índice);
if ((pnode! = null) && (pnode.next! = null)) {
return pnode.next.person;
}
retornar nulo;
}
public pnode Remover (int index) {
if (size == 0) {
retornar nulo;
} outro {
if ((índice <0) || (índice> = size)) {
retornar nulo;
}
}
Pnode no = cabeça;
for (int i = 0; i <(índice - 1); i ++) {
Não = No.Next;
}
No.Next = No.Next.Next;
tamanho--;
if ((não! = null) && (No.Next! = null)) {
Retorno No.Next;
}
retornar nulo;
}
/**
* Remova o próximo nó do nó da pessoa e devolva a pessoa excluída
* @param preperson
* @return Pessoa removida
*/
Pessoa pública Remova (Pessoa Preperson) {
if (preperson == null) {
retornar nulo;
}
if (size == 0) {
retornar nulo;
}
Pnode prenode = head;
int index = -1;
for (int i = 0; i <tamanho; i ++) {
if (prenode.person.id == preperson.id) {
índice = i;
quebrar;
} outro {
prenode = prenode.next;
}
}
Pessoa rempeson = nulo;
if (size <= 1) {
// apenas um nó, pegue sua pessoa e defina -o como nulo
remperson = prenode.person;
pré -calodo = nulo;
} outro {
//prenode.next.person é destin
remperson = prenode.next.person;
prenode.next = prenode.next.next;
}
tamanho--;
//System.out.println("Deleteing Index = " + Index +": " + Remperson +", size = " + size);
Retornar Remperson;
}
public int update (pessoa src, pessoa dest) {
if (src == null) {
retornar -1;
}
int index = -1;
Pnode no = cabeça;
for (int i = 0; i <tamanho; i ++) {
if (src.id == No.Person.id) {
No.Person = dest;
quebrar;
} outro {
Não = No.Next;
}
}
Índice de retorno;
}
Public Boolean Set (Int Index, Pessoa Pessoa) {
if (pessoa == null) {
retornar falso;
}
if (size == 0) {
retornar falso;
} outro {
if ((índice <0) || (índice> = size)) {
retornar falso;
}
}
Pnode no = cabeça;
for (int i = 0; i <index; i ++) {
Não = No.Next;
}
No.Person = Pessoa;
retornar true;
}
Pessoa pública Get (Int Index) {
Pnode no = getNode (index);
if (não! = null) {
Retorno No.Person;
}
retornar nulo;
}
public pnode getNode (int index) {
if (size == 0) {
retornar nulo;
} outro {
if ((índice <0) || (índice> = size)) {
retornar nulo;
}
}
Pnode no = cabeça;
for (int i = 0; i <index; i ++) {
Não = No.Next;
}
retornar não;
}
public void Search () {
int sizelong = tamanho;
Pnode no = cabeça;
for (int i = 0; i <sizelong; i ++) {
System.out.println ("Search index =" + i + "," + não);
Não = No.Next;
}
}
}
classe pública pnode {
Pessoa pessoa;
Pnode a seguir = nulo;
public pnode () {
}
public pnode (pessoa da pessoa) {
this.person = pessoa;
}
public pnode (pessoa da pessoa, pnode a seguir) {
this.person = pessoa;
this.Next = Next;
}
@Override
public string tostring () {
Retorne "pnode [Person =" + Person.id + ", Next =" + Next.person.id +
"]";
}
public Person getPerson () {
pessoa de volta;
}
public void setPerson (pessoa da pessoa) {
this.person = pessoa;
}
public pnode getNext () {
retornar a seguir;
}
public void setNext (pnode a seguir) {
this.Next = Next;
}
}
Pessoa da classe pública {
int id = 0;
String name = "";
Pessoa pública () {
}
Pessoa pública (int id, nome da string) {
super();
this.id = id;
this.name = nome;
}
@Override
public string tostring () {
retornar "pessoa [id =" + id + ", name =" + name + "]";
}
}
}