Die Codekopie lautet wie folgt: Paketliste;
Import Java.util.ArrayList;
/**
* Java Joseph Problem: N Individuen (verschiedene IDs) bilden einen Kreis, zählen Sie M (eine beliebige Zahl) ab Startid (eine beliebige Zahl).
* Dann zählen Sie M -Zahlen der nächsten Person, und das Zählen von M wird am Ende der neuen Warteschlange gelöst.
* Drucken Sie die neue Warteschlange aus, nachdem Sie entfernt wurden
*
* zB
* int n = 10; // Gesamtzahl der Personen
* int m = 3;
* int startindex = 1;
* @Author Hulk 2014 03 20
*
*/
öffentliche Klasse JosephListtest {
public static void main (String [] args) {
Long start time = system.currenttimemillis ();
JosephListTest Test = new JosephListTest ();
int n = 10; // Gesamtzahl der Personen
int m = 3;
int startindex = 12;
System.out.println ("JosephListTest: n =" + n + ", m =" + m +
", startIndex =" + startIndex + "/n/nqueue Ergebnis:");
ArrayList <Person> queueuelist = test.queuepreson (n, m, startIndex);
für (Person Person: Queuuelist) {
System.out.println ("out Person:" + Person);
}
System.out.println ("Time =" + + +
(System.currentTimemillis () - StartTime));
}
Private ArrayList <Person> Queuepreson (int n, int m, int startindex) {
ArrayList <Person> queueuelist = null;
Personlistliste = 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);
} anders {
pnode = list.head;
}
int count = 1;
while (list.size> 0) {
Person outunperson = null;
//finden
if (count == (m - 1)) {
// Nächsten Knoten löschen
Person prev = pnode.person;
outperson = list.remove (prev);
Queuelist.Add (Outferson);
//System.out.println("Out Person: " + Outferson +", size = " + list.size);
count = 0;
}
pnode = pnode.next;
zählen ++;
}
}
Rückkehr Queueurist;
}
Private Personlist CreateList (int n) {
Personlistliste = new PersonList ();
für (int i = 0; i <n; i ++) {
Person Person = New Person (i, "name_" + (i + 1));
list.add (i, Person);
}
Rückgabeliste;
}
public class Personlist {
Pnode head = null;
int size = 0;
public PersonList () {
}
öffentliche Personliste (Person Person) {
head = neuer pnode (Person, Kopf);
Größe ++;
}
öffentliche Personlist (Pnode Head) {
this.head = Kopf;
Head.SetNext (Kopf);
Größe ++;
}
public pnode gethead () {
Rückweg;
}
public void sethead (pnode head) {
this.head = Kopf;
}
public int getSize () {
Renditegröße;
}
public void setSize (int size) {
this.size = Größe;
}
public void Größe (int Größe) {
this.size = Größe;
}
public boolean isempty () {
Rückgabe this.size <= 0;
}
public void inithead (Person Person) {
if (size == 0) {
head = neuer pnode (Person, Kopf);
} anders {
Pnode no = Kopf;
head = neuer pnode (Person, no);
}
Größe ++;
}
public void add (int index, Person Person) {
if (size == 0) {
head = neuer pnode (Person, Kopf);
Head.SetNext (Kopf);
//System.out.println("head: " + head);
} anders {
if (index <0) {
Index = 0;
}
if (index> Größe) {
Index = Größe;
}
Pnode no = Kopf;
für (int i = 0; i <(index - 1); i ++) {
NEIN = Nr. NEXT;
}
Pnode newnode = new Pnode (Person, Nr. Next);
Nr. next = newnode;
}
Größe ++;
}
öffentliche Person delete (int index) {
Pnode pnode = remove (index);
if ((pnode! = null) && (pnode.next! = null)) {
return pnode.next.person;
}
null zurückkehren;
}
public pnode remove (int index) {
if (size == 0) {
null zurückkehren;
} anders {
if ((index <0) || (index> = Größe)) {
null zurückkehren;
}
}
Pnode no = Kopf;
für (int i = 0; i <(index - 1); i ++) {
NEIN = Nr. NEXT;
}
Nr. next = no.Next.Next;
Größe--;
if ((nein! = null) && (no.Next! = null)) {
Rückkehr Nr. NEXT;
}
null zurückkehren;
}
/**
* Entfernen Sie den nächsten Knoten des Personenknotens und geben Sie die gelöschte Person zurück
* @param preperson
* @return entfernt Person
*/
öffentliche Person entfernen (Person Preperson) {
if (preperson == null) {
null zurückkehren;
}
if (size == 0) {
null zurückkehren;
}
Pnode prenode = Kopf;
int index = -1;
für (int i = 0; i <size; i ++) {
if (prenode.person.id == preperson.id) {
index = i;
brechen;
} anders {
prenode = prenode.next;
}
}
Person remperson = null;
if (Größe <= 1) {
// Nur ein Knoten, holen Sie sich ihre Person und setzen Sie ihn als Null
remperson = prenode.person;
prenode = null;
} anders {
//Prenode.next.person ist dest
remperson = prenode.next.person;
prenode.Next = prenode.next.Next;
}
Größe--;
//System.out.println("deleteing Index = " + index +": " + remperson +", size = " + size);
Return Remperson;
}
public int update (Person src, Person dest) {
if (src == null) {
Return -1;
}
int index = -1;
Pnode no = Kopf;
für (int i = 0; i <size; i ++) {
if (src.id == no. -Person.id) {
Nr. Person = dest;
brechen;
} anders {
NEIN = Nr. NEXT;
}
}
Rückgabeindex;
}
public boolean set (int index, Person Person) {
if (Person == null) {
false zurückgeben;
}
if (size == 0) {
false zurückgeben;
} anders {
if ((index <0) || (index> = Größe)) {
false zurückgeben;
}
}
Pnode no = Kopf;
für (int i = 0; i <index; i ++) {
NEIN = Nr. NEXT;
}
Nr. Person = Person;
zurückkehren;
}
öffentliche Person Get (int Index) {
Pnode no = getNode (index);
if (nein! = null) {
Rückkehr Nr. Person;
}
null zurückkehren;
}
public pnode getNode (int index) {
if (size == 0) {
null zurückkehren;
} anders {
if ((index <0) || (index> = Größe)) {
null zurückkehren;
}
}
Pnode no = Kopf;
für (int i = 0; i <index; i ++) {
NEIN = Nr. NEXT;
}
Rückkehr Nr.;
}
public void Search () {
int Sizelong = Größe;
Pnode no = Kopf;
für (int i = 0; i <Sizelong; i ++) {
System.out.println ("Search Index =" + i + "," + no);
NEIN = Nr. NEXT;
}
}
}
öffentliche Klasse Pnode {
Person;
Pnode next = null;
public pnode () {
}
public pnode (Person Person) {
this.person = Person;
}
public pnode (Person Person, Pnode als nächstes) {
this.person = Person;
this.Next = Weiter;
}
@Override
public String toString () {
return "pnode [person =" + person.id + ", next =" + next.person.id +
"]";
}
öffentliche Person Getperson () {
Rückkehr Person;
}
public void setperson (Person Person) {
this.person = Person;
}
public pnode getNext () {
Als nächstes zurückkehren;
}
public void setNext (pnode next) {
this.Next = Weiter;
}
}
Person der öffentlichen Klasse {
int id = 0;
String name = "";
public Person () {
}
public person (int id, string name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString () {
return "Person [id =" + id + ", name =" + name + "]";
}
}
}