como crear listas criculares

me pueden ayudar
nesecito un metodo comun oara cifrar textos con un desplazamiento del abecedario "a,b,c,...z" y traducir la ketra con el desplazamiento correspondiente
ejemplo
hola_mundo
azumir desplazamiento de 3
resultado
krod_pxqgr

el requisito es unsa listas circulares

gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Con heap

Con heap

Que es lo que llevas? Es

Que es lo que llevas?

Es tarea?

Una implementación muy simple puede ser...

Crear un wrapper de la lista y definit el metodo get como:

public Object get( int index ) {
     return data.get( index % data.size() );
}

Y listo. Así, si de una lista de 10 elemento te piden el 11, 11%10 = 1 , regresas el elemento 1.

Aquií esta este código sencillo.

También se puede implementar la interfaz list o iterable, pero requiere un poquito más de código.

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;

public class CircularList<T> {
    private final List<T> list;
    private final int size;
   
    public CircularList( List<T> list ){
        this.list = new ArrayList<T>( list );
        this.size = list.size();
    }
    public T get( int index  ){
        return list.get( index % size );
    }
    public int size(){
        return this.size;
    }
}
class CircularListDemo {
    public static void main( String [] args ){
        // preparar la lista circular
        CircularList<String> list = new CircularList<String>(
            Arrays.asList("abcdefghijklmnopqrstuvwxyz".split(""))
        );
        // Aqui va el resultado
        StringBuilder builder = new StringBuilder();

        // iteramos cada letra
        for( char c : "hola_mundo".toCharArray() ){

            // buscamos el caracter en turno
            int index = -1;
            for( int i = 0 ; i < list.size(); i++ ) {
               
                if( list.get( i ).equals( c +"" )){
                    index = i;
                    break;
                }
            }
            // Si estuvo
            if( index >= 0 ){
                // lo ponemos en la pocision + 3 a regresa d
                builder.append( list.get( index + 3 ));
            }else{
                // si no estuvo , ponemos el caracter tal cual
                builder.append( c );
            }
        }
        System.out.println(builder.toString());
        // imprime: krod_pxqgr
    }
}

la otra posibilidad es

la otra posibilidad es creando un queue circular, claro definiendo en un momento dado el inicio y el final seran iguales , si hay espacio tendras que usar la funcion mod
para que puedas ingresar aquel elemento en ese espacio. ahora si utilizas listas enlazadas une el final con el principio y como es una lista enlazdas los nodos no se terminan nunca ya que sera dinamica. capichi