Son 3 clases, una clase nodo otra es la clase lista y la clase principal.
Código:
public class Nodo {
int dato;
Nodo siguiente;
public Nodo(){
this.dato=0;
siguiente=null;
}
public Nodo(int n){
this.dato=n;
siguiente=null;
}
}
Código:
import javax.swing.JOptionPane;
public class Lista {
public Nodo cabeza;
public Lista(){
this.cabeza=null;
}
public void insertarFinal(int info){
Nodo indice;
indice=cabeza;
if(indice==null){
cabeza= new Nodo(info);
} else{
while(indice.siguiente!=null){
indice=indice.siguiente;
}
indice.siguiente=new Nodo(info);
}
}
public void insertarInicio(int info){ //porque recibe el valor que va dentro del nodo
Nodo a= new Nodo(info);
a.siguiente=cabeza;
cabeza=a;
a=null;
}
public void eliminarCabeza(){
Nodo aux;
aux=cabeza;
cabeza=cabeza.siguiente;
aux.siguiente=null;
}
public void Mostrar(){
Nodo indice;
indice=cabeza;
while(indice!=null){
System.out.print("\n"+indice.dato);
indice=indice.siguiente;
}
}
}
Código:
import javax.swing.*;
public class Principal {
public static void main(String[] args) {
int k, contk = 0, n, soldvivo;
Lista miLista = new Lista();
Nodo ind1;
Nodo ind2;
Nodo cabeza;
n = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de soldados"));
k = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de la muerte"));
for (int i = 0; i < n; i++) {
miLista.insertarFinal(i + 1);
}
soldvivo = n;
cabeza = miLista.cabeza;
ind1 = cabeza;
ind2 = cabeza;
if (k == 1)
{
while (soldvivo > 1)
{
miLista.eliminarCabeza();
soldvivo--;
}
}
else {
while (soldvivo > 1)
{
contk++;
if (contk == k)
{
if (ind1 == cabeza)
{
cabeza = cabeza.siguiente;
ind1.siguiente = null;
ind1 = cabeza;
ind2 = cabeza;
contk = 1;
}
else
{
while (ind2.siguiente != ind1)
{
ind2 = ind2.siguiente;
}
if (ind1.siguiente == null)
{
ind2.siguiente = null;
ind1 = ind2;
contk = 0;
}
else
{
ind2.siguiente = ind1.siguiente;
ind1.siguiente = null;
ind1 = ind2;
contk = 0;
}
}
soldvivo--;
}
if (soldvivo != 1)
{
ind1 = ind1.siguiente;
if (ind1.siguiente == null)
{
contk++;
if (contk == k)
{
while (ind2.siguiente != ind1)
{
ind2 = ind2.siguiente;
}
ind2.siguiente = null;
soldvivo--;
contk = 0;
}
ind1 = cabeza;
ind2 = cabeza;
}
}
}
}
System.out.print(cabeza.dato);
}
}