Aarsh Modi Ответов: 1

Решение задачи joeshpus в java с использованием дважды кругового связанного списка


как сохранить все детализированные узлы и восстановить список в том же состоянии, что и раньше ?

Что я уже пробовал:

Я пробовал использовать стек для хранения всех удаленных элементов во время удаления, но не знаю, правильный ли это подход или нет.

public static String josephus(int m) {
Node ptr1 = start, ptr2 = start;
if (m > size) {
throw new LinkedListException("No element left to remove");
}

while (ptr1.next != ptr1) {

// Find m-th node
int count = 1;
while (count != m) {
ptr2 = ptr1;
ptr1 = ptr1.next;
count++;
}

/* Remove the m-th node */
System.out.println("Removing item : " + ptr1.data);
stack.push(ptr1.data);
ptr2.next = ptr1.next;
ptr1 = ptr2.next;
}

return ptr1.data;
}

public static void setOriginal(int m) {
Node ptr1 = start;
while (!stack.isEmpty() && ptr1.next != ptr1) {

// Find m-th node
int count = 1;
while (count != m) {
ptr1 = ptr1.next;
count++;
}

ptr1.data = stack.pop();
//System.out.println(ptr1.item);
}
}

1 Ответов

Рейтинг:
0

CPallini

Цитата:
Я пробовал использовать стек для хранения всех удаленных элементов во время удаления, но не знаю, правильный ли это подход или нет
Вы можете установить это экспериментально: сверьте свои результаты с исходным списком.

(Или разместите здесь свой код, иначе вопрос будет иметь плохой смысл).


Aarsh Modi

общественности статической строки Иосифа Флавия(инт м) {
Узел ptr1 = start, ptr2 = start;
если (m > размер) {
бросить новый LinkedListException("ни один элемент влево, чтобы удалить");
}

пока (ptr1 выглядит следующим образом.следующий != ptr1 выглядит следующим образом) {

// Найти m-й узел
int count = 1;
в то время как (count != m) {
ptr2 = ptr1;
ptr1 выглядит следующим образом = ptr1 выглядит следующим образом.далее;
считать++;
}

/* Удалить m-й узел */
Системы.из.код println("извлечение элемента :" + ptr1 выглядит следующим образом.сведения);
стек.толчок(ptr1 выглядит следующим образом.сведения);
ptr2.следующий = ptr1 выглядит следующим образом.далее;
ptr1 выглядит следующим образом = ptr2.далее;
}

вернуться ptr1 выглядит следующим образом.сведения;
}

public static void setOriginal(int m) {
Узел ptr1 = start;
хотя (!стек.пустой () и усилитель; & ptr1 выглядит следующим образом.следующий != ptr1 выглядит следующим образом) {

// Найти m-й узел
int count = 1;
в то время как (count != m) {
ptr1 выглядит следующим образом = ptr1 выглядит следующим образом.далее;
считать++;
}

ptr1 выглядит следующим образом.данные = стек.поп();
//Системы.из.код println(ptr1 выглядит следующим образом.пункт);
}
}