LSE NetBeans

Hola a todos, me podrian ayudar con este ejercicio. Necesito hacer las operaciones basicas de una lista.
Tengo un problema, cuando cargo la lista se me insertan los elementos por la parte izquierda, a partir del primer nodo. Ademas despues de cargar la lista, tengo que volver a insertar en cualquier parte de la lista. Este es el codigo que tengo...

public class Lista {

private Nodo list;

public Lista(){
list=null;
}

public Nodo Inicio(){
return list;
}

public void InsertarPri(int elem){
Nodo x = new Nodo(elem);
x.setPs(list);
list=x;

}

public void InsertarMed(int elem, Nodo ant){
Nodo x = new Nodo(elem);
x.setPs(ant);
ant.setPs(x);
}

public void InsertarUlt(int elem, Nodo ant){
Nodo x = new Nodo (elem);
ant.setPs(x);
x.setPs(null);
}
-------------------------------------
public class ListaApp {
Lista A;
Nodo L;
Scanner ingreso;

public ListaApp(){
A= new Lista();
ingreso= new Scanner(System.in);
}

public void generar(){
int num;
char op= 's';
while(op!= 'n' && op !='N'){
System.out.println("\n Ingrese un numero:");
num = Integer.parseInt(ingreso.nextLine());
A.InsertarPri(num);
System.out.print("\n\n para continuar para salir: ");
String opcion= ingreso.nextLine();
op = opcion.isEmpty()? 's': opcion.charAt(0);
}
}

public void imprimir(){
Nodo j= A.Inicio();
if (j!=null){
while(j!=null){
System.out.println("Elemento: " + j.getDato());
j=j.getPs();
}
}
else
System.out.println("\n Lista Vacia");
}

---Gracias---