Кода кода следующая: список пакетов;
импортировать java.util.arraylist;
/**
* Java Joseph Проблема: n Индивидуумы (разные идентификаторы) образуют круг, начните считать m (любое число), начиная с Startid (любое число).
* Затем начните подсчитывать числа M от следующего человека, и подсчет M будет делистировано в конце новой очереди.
* Распечатайте новую очередь после удаления
*
* например
* int n = 10; // Общее количество людей
* int m = 3;
* int startindex = 1; // Начальная позиция
* @author Hulk 2014 03 20
*
*/
открытый класс Josephlisttest {
public static void main (string [] args) {
long starttime = System.currentTimeMillis ();
Josephlisttest test = new Josephlisttest ();
int n = 10;
int m = 3;
int startindex = 12;
System.out.println ("Josephlisttest: n =" + n + ", m =" + m +
", startIndex =" + startIndex + "/n/nqueue Результат:");
ArrayList <Ensember> queuelist = test.QueuePreson (n, m, startIndex);
для (человек: queuelist) {
System.out.println ("Out Person:" + Person);
}
System.out.println ("Использовать время =" +
(System.CurrentTimeMiLlis () - StartTime));
}
Private ArrayList <ersont> queuepreson (int n, int m, int startindex) {
ArrayList <Person> queuelist = null;
PersonList list = 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);
} еще {
pnode = list.head;
}
int count = 1;
while (list.size> 0) {
Человек Oversperson = null;
//находить
if (count == (m - 1)) {
// удалить следующий узел
Человек prev = pnode.person;
Outperson = list.remove (prev);
queuelist.add (Outperson);
//System.out.println("ut Person: " + Outperson +", size = " + list.size);
count = 0;
}
pnode = pnode.next;
count ++;
}
}
вернуть Queuelist;
}
Private Personlist CreateList (int n) {
PersonList List = new PersonList ();
для (int i = 0; i <n; i ++) {
Человек = новый человек (i, "name_" + (i + 1));
list.add (i, человек);
}
вернуть список;
}
публичный класс PersonList {
PNODE HEAD = NULL;
int size = 0;
public Personlist () {
}
Public Personlist (Person Person) {
Head = новый pnode (человек, голова);
размер ++;
}
public Personlist (pnode Head) {
this.head = Head;
Head.SetNext (Head);
размер ++;
}
public pnode gethead () {
вернуть голову;
}
public void sethead (pnode head) {
this.head = Head;
}
public int getSize () {
возвратный размер;
}
public void setSize (int size) {
this.size = size;
}
public void size (int size) {
this.size = size;
}
public boolean isempty () {
вернуть это. size <= 0;
}
public void inithead (человек) {
if (size == 0) {
Head = новый pnode (человек, голова);
} еще {
PNODE NO = HEAD;
Head = новый pnode (человек, нет);
}
размер ++;
}
public void add (int index, человек) {
if (size == 0) {
Head = новый pnode (человек, голова);
Head.SetNext (Head);
//System.out.println("ead: " + head);
} еще {
if (index <0) {
index = 0;
}
if (index> size) {
index = size;
}
PNODE NO = HEAD;
for (int i = 0; i <(index - 1); i ++) {
Нет = № нексте;
}
Pnode newnode = new pnode (человек, №NEXT);
№ next = newnode;
}
размер ++;
}
публичный человек удалить (int index) {
Pnode pnode = remove (index);
if ((pnode! = null) && (pnode.next! = null)) {
вернуть pnode.next.person;
}
вернуть ноль;
}
public pnode Remove (int index) {
if (size == 0) {
вернуть ноль;
} еще {
if ((index <0) || (index> = size)) {
вернуть ноль;
}
}
PNODE NO = HEAD;
for (int i = 0; i <(index - 1); i ++) {
Нет = № нексте;
}
№ next = № next.next;
размер--;
if ((нет! = null) && (№ next! = null)) {
возврат №NEXT;
}
вернуть ноль;
}
/**
* Удалите следующий узел узела и верните удаленного человека
* @param Preperson
* @return удален человек
*/
публичный человек удаляет (личность преоблада) {
if (preperson == null) {
вернуть ноль;
}
if (size == 0) {
вернуть ноль;
}
Pnode prenode = Head;
int index = -1;
для (int i = 0; i <size; i ++) {
if (prenode.person.id == preperson.id) {
index = i;
перерыв;
} еще {
prenode = prenode.next;
}
}
Человек remperson = null;
if (size <= 1) {
// Только один узел, получите своего человека и установите как нулевой
remperson = prenode.person;
prenode = null;
} еще {
//prenode.next.person - это Dest One
remperson = prenode.next.person;
prenode.next = prenode.next.next;
}
размер--;
//System.out.println(".deleteing index = " + index +": " + remperson +", size = " + size);
вернуть Ремперсон;
}
public int update (человек src, person dest) {
if (src == null) {
возврат -1;
}
int index = -1;
PNODE NO = HEAD;
для (int i = 0; i <size; i ++) {
if (src.id == № pperson.id) {
№ pperson = dest;
перерыв;
} еще {
Нет = № нексте;
}
}
Индекс возврата;
}
Общественный логический набор (int index, человек) {
if (человек == null) {
вернуть ложь;
}
if (size == 0) {
вернуть ложь;
} еще {
if ((index <0) || (index> = size)) {
вернуть ложь;
}
}
PNODE NO = HEAD;
для (int i = 0; i <index; i ++) {
Нет = № нексте;
}
№ Pperson = человек;
вернуть истину;
}
публичный человек получить (int index) {
Pnode no = getNode (index);
if (нет! = null) {
возвращение № Pperson;
}
вернуть ноль;
}
public pnode getNode (int index) {
if (size == 0) {
вернуть ноль;
} еще {
if ((index <0) || (index> = size)) {
вернуть ноль;
}
}
PNODE NO = HEAD;
для (int i = 0; i <index; i ++) {
Нет = № нексте;
}
вернуть нет;
}
public void search () {
int sizelong = size;
PNODE NO = HEAD;
для (int i = 0; i <sizelong; i ++) {
System.out.println ("search index =" + i + "," + no);
Нет = № нексте;
}
}
}
открытый класс pnode {
Человек;
PNODE NEXT = NULL;
public pnode () {
}
public pnode (человек) {
this.person = человек;
}
public pnode (человек, Pnode Далее) {
this.person = человек;
this.next = Далее;
}
@Override
public String toString () {
вернуть "pnode [person =" + person.id + ", next =" + next.person.id +
"]";
}
публичный человек getPerson () {
возвращающийся человек;
}
public void setperson (человек) {
this.person = человек;
}
public pnode getNext () {
вернуться следующим;
}
public void setNext (pnode Далее) {
this.next = Далее;
}
}
публичный класс человек {
int id = 0;
String name = "";
Public Person () {
}
Public Person (INT ID, String Name) {
супер();
this.id = id;
this.name = name;
}
@Override
public String toString () {
вернуть "человек [id =" + id + ", name =" + name + "]";
}
}
}