Estructura de datos java (Listas simplemente enlazadas) Primer aporte

Buenas madrugadas a todos, aquí dejo un simple aporte, espero no este posteado ya, y espero les sea muy útil, saludos!

/*
 * Lista Simplemente enlazada.
 *
 */

/**
 *
 * @author Pain
 */

//Clase Nodo. Utiliza el enlace llamado nodoDer o nodo derecho y el valor a introducir.
public class Nodo {
    Nodo nodoDer;
    int dato;

    public Nodo(int dato) {
        this.dato = dato;
        this.nodoDer = null;
    }

}

/*
 * Clase de Lista enlazada y metodos de agregar al final y borrar del mismo, asi como mostrar tamaño y visualizar lista.
 *
 */

import javax.swing.JOptionPane;

/**
 *
 * @author Pain
 */

public class ListaS {
    private Nodo primero;
    private Nodo ultimo;
    private int tamano;

    public ListaS() {
        this.primero = null;
        this.ultimo = null;
        this.tamano = 0;
    }

//Metodo utilizado para denotar que la lista se encuentra vacia.
    public boolean siVacio() {
        return (this.primero == null);
    }

//Metodo para agregar al final de la lista.
    public ListaS addLast(int dato) {
        if(siVacio()) {
            Nodo nuevo = new Nodo(dato);
            primero = nuevo;
            ultimo = nuevo;
            nuevo.nodoDer = nuevo;
        }
        else {
            Nodo nuevo = new Nodo(dato);
            nuevo.nodoDer = null;
            ultimo.nodoDer = nuevo;
            ultimo = nuevo;
        }
        this.tamano++;
        return this;
    }

//Metodo para borrar al final de la lista.
    public Nodo deleteLast() {
        Nodo eliminar = null;
        if(siVacio()) {
            JOptionPane.showMessageDialog(null, "La lista se encuentra vacia");
            return null;
        }
        if(primero == ultimo) {
            primero = null;
            ultimo = null;
        }
        else {
            Nodo actual = primero;
            while(actual.nodoDer != ultimo) {
                actual = actual.nodoDer;
            }
            eliminar = actual.nodoDer;
            actual.nodoDer = null;

            ultimo = actual;
        }
        this.tamano--;
        return eliminar;
    }

//Metodo que imprime el tamaño de la lista.
    public void tamano() {
        JOptionPane.showMessageDialog(null, "El tamaño es:\n " + this.tamano);
    }

//Metodo que imprime la lista y los valores ingresados.
    public void imprimir() {
        if(tamano != 0) {
            Nodo temp = primero;
            String str = "";
            for(int i = 0; i < this.tamano; i++) {
                str = str + temp.dato + "\n";
                temp = temp.nodoDer;
            }
            JOptionPane.showMessageDialog(null, str);
        }
    }
}

Espero que de alguna manera les sea de utilidad este código. Saludos Comunidad.

Comentarios

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.
Imagen de ezamudio

Generics

Con Generics podrias manejar listas de un cierto tipo de objeto. Y si el método de tamano() devuelve un int con el tamaño en vez de imprimir un diálogo, entonces ya no depende de Swing y se puede usar en aplicaciones sin interfaz gráfica o en web, etc.

En la clase Nodo, la propiedad nodoDer debería ser privada y la clase debe tener accesores para modificarlo. La propiedad dato en vez de int puede ser genérica, algo asi:

public class Nodo<T> {
  private Nodo<T> sig;
  private T dato;

  public Nodo(T data) {
    dato = data;
  }

  public Nodo(T data, Nodo<T> sig) {
    dato = data;
    this.sig = sig;
  }

  public void setSiguiente(Nodo<T> sig) {
    this.sig = sig;
  }
  public Nodo<T> getSiguiente() {
    return sig;
  }

  public T getDato() {
    return dato;
  }

}

De igual manera la lista la haces genérica para poder manejar listas que almacenen datos de cualquier clase.

Gracias por compartir

Qué bueno que le dedique tiempo a entender estructuras de datos y a compartir lo que produces. Ahora si me permites, me enfocaré en algunos aspectos técnicos de tu implementación, que espero nadie utilice pues tiene deficiencias importantes, comprensibles porque estás aprendiendo.

1) Familiarízate con el concepto de ocultamiento de información (information hiding). Varios autores lo denominan también encapsulamiento. No está presente en tu diseño.

2) Quítale la interfaz de usuario, sepárala en otra clase. Familiarízate con el concepto de separación de ocupaciones o Separation of concerns. Aprende a usar una consola (línea de comandos).

3) Usa adecuadamente los comentarios JavaDoc. Pusiste un comentario en línea que debiera de haber ido en el bloque JavaDoc.

4) Las inicializaciones que pusiste en el constructor son redundantes, el compilador hubiera creado ese mismo constructor (si tu no lo hubieras declarado). Familiarízate con los valores por defecto de los tipos Java.

5) Familiarízate con el Java Collections Framework. Especialmente la interfaz java.util.List y las clases java.util.AbstractCollection, java.util.AbstractList, java.util.JavaAbstractSequentialList y finalmente java.util.LinkedList. Tienes el código fuente de Java, ábrelo, despanzúrralo, disfrútalo y aprende.

Saludos

Javier Castañón

Imagen de ezamudio

Conceptos

De acuerdo con los puntos 1 al 4 (el 1 y 2 son los que yo me enfoqué en mi post). En cuanto al 5, supongo que ese código salió de una tarea en clases de programación, porque aunque en Java existen cosas como ArrayList, Vector, HashMap, Hashtable, TreeSet, etc etc, es bueno que se tenga conocimiento de conceptos básicos como listas simplemente ligadas, listas doblemente ligadas, etc. A fin de cuentas es manejo de objetos y apuntadores y resolver problemas muy básicos, que para aprender son muy útiles.

Como dices, nadie en la práctica debería usar algo así porque Java ya incluye estructuras de datos más eficientes que esto. Tal vez el problema de raíz es que el prof no eligió el mejor lenguaje para enseñar este tipo de cosas (Pascal o C pueden ser mejores opciones; en C, un apuntador mal manejado truena el programa completo, y despues de perder muchisimo tiempo depurándolo, no se te vuelve a olvidar checar nulos, hacer free() por cada malloc() etc).

Siempre he creído que Java no es un buen lenguaje para aprender a programar. Como mínimo, es útil para aprender programación orientada a objetos, pero no programación básica. Sigo creyendo que antes de eso, hay que ver estructuras de datos básicas y algo de programación estructurada, solamente para tener bien presentes los conceptos más básicos de cómputo y programación.

Conceptos

Totalmente de acuerdo, mi mensaje quedó mal, porque quise decir "Qué bueno que le dediques tiempo a entender estructuras de datos" Me ha tocado trabajar con mucha gente que no tiene idea sobre estructuras de datos, coincido contigo que más allá del lenguaje de programación seleccionado, es conocimiento básico.

Concurro contigo también que C sería una mejor elección para aprender a programar, por la razón que mencionas: un programa mal hecho en Java de todas maneras corre, en cambio un programa mal hecho en C provoca un segfault. Ocurre que como el muchacho está aprendiendo Java, la verdad me faltó valor para referenciarlo a las colecciones de C++, que encuentro más complicadas que las de Java. Un amigo me dijo que las de SmallTalk son muy bonitas, pero yo las desconozco.

Saludos

Javier Castañón

como se guardan eliminar y borran datos en netbeans 6.5 y MySQL

Hola soy de colombia estudio analisis y diseño de sistemas de informacion tengo una duda no se por que me ha generado error el siguiente codigo me puden ayudar por favor es para la entrega de mi proyecto y no he podido avanzar ya esta los enlaces hechos en la base de datos trabajo con mysql y bueno no me genera error pero tampoco hace el proceso y cuando voy a guardar no lo hace
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package proyecto;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Alert;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.Calendar;
import com.sun.webui.jsf.component.Form;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.TextField;
import javax.faces.FacesException;
import javax.faces.event.ValueChangeEvent;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
*

Page bean that corresponds to a similarly named JSP page. This
* class contains component definitions (and initialization code) for
* all components that you have defined on this page, as well as
* lifecycle methods and event handlers where you may add behavior
* to respond to incoming events.

*
* @version personal.java
* @version Created on 1/04/2009, 07:20:03 AM
* @author C.A.S.A
*/

public class personal extends AbstractPageBean {
//

/**
*

Automatically managed component initialization. WARNING:
* This method is automatically generated, so any user-specified code inserted
* here is subject to being replaced.

*/
private void _init() throws Exception {
}
private TextField nombre = new TextField();

public TextField getNombre() {
return nombre;
}

public void setNombre(TextField tf) {
this.nombre = tf;
}
private TextField apellido = new TextField();

public TextField getApellido() {
return apellido;
}

public void setApellido(TextField tf) {
this.apellido = tf;
}
private TextField telefono = new TextField();

public TextField getTelefono() {
return telefono;
}

public void setTelefono(TextField tf) {
this.telefono = tf;
}
private TextField direccion = new TextField();

public TextField getDireccion() {
return direccion;
}

public void setDireccion(TextField tf) {
this.direccion = tf;
}
private TextField cargo = new TextField();

public TextField getCargo() {
return cargo;
}

public void setCargo(TextField tf) {
this.cargo = tf;
}
private Calendar fecha_ingreso = new Calendar();

public Calendar getFecha_ingreso() {
return fecha_ingreso;
}

public void setFecha_ingreso(Calendar c) {
this.fecha_ingreso = c;
}
private Calendar fecha_salida = new Calendar();

public Calendar getFecha_salida() {
return fecha_salida;
}

public void setFecha_salida(Calendar c) {
this.fecha_salida = c;
}
private TextField tipo_capacitacion = new TextField();

public TextField getTipo_capacitacion() {
return tipo_capacitacion;
}

public void setTipo_capacitacion(TextField tf) {
this.tipo_capacitacion = tf;
}
private Label label2 = new Label();

public Label getLabel2() {
return label2;
}

public void setLabel2(Label l) {
this.label2 = l;
}
private Label label3 = new Label();

public Label getLabel3() {
return label3;
}

public void setLabel3(Label l) {
this.label3 = l;
}
private Label label4 = new Label();

public Label getLabel4() {
return label4;
}

public void setLabel4(Label l) {
this.label4 = l;
}
private Label label5 = new Label();

public Label getLabel5() {
return label5;
}

public void setLabel5(Label l) {
this.label5 = l;
}
private Label label6 = new Label();

public Label getLabel6() {
return label6;
}

public void setLabel6(Label l) {
this.label6 = l;
}
private Label label7 = new Label();

public Label getLabel7() {
return label7;
}

public void setLabel7(Label l) {
this.label7 = l;
}
private Label label8 = new Label();

public Label getLabel8() {
return label8;
}

public void setLabel8(Label l) {
this.label8 = l;
}
private Label label9 = new Label();

public Label getLabel9() {
return label9;
}

public void setLabel9(Label l) {
this.label9 = l;
}
private Button guardar = new Button();

public Button getGuardar() {
return guardar;
}

public void setGuardar(Button b) {
this.guardar = b;
}
private Button consulta2 = new Button();

public Button getConsulta2() {
return consulta2;
}

public void setConsulta2(Button b) {
this.consulta2 = b;
}
private Form form2 = new Form();

public Form getForm2() {
return form2;
}

public void setForm2(Form f) {
this.form2 = f;
}
private TextField id_empleado2 = new TextField();

public TextField getId_empleado2() {
return id_empleado2;
}

public void setId_empleado2(TextField tf) {
this.id_empleado2 = tf;
}

//

/**
*

Construct a new Page bean instance.

*/
public personal() {
}

/**
*

Callback method that is called whenever a page is navigated to,
* either directly via a URL, or indirectly via page navigation.
* Customize this method to acquire resources that will be needed
* for event handlers and lifecycle methods, whether or not this
* page is performing post back processing.

*
*

Note that, if the current request is a postback, the property
* values of the components do not represent any
* values submitted with this request. Instead, they represent the
* property values that were saved for this view when it was rendered.

*/
@Override
public void init() {
// Perform initializations inherited from our superclass
super.init();
// Perform application initialization that must complete
// *before* managed components are initialized
// TODO - add your own initialiation code here

//
// Initialize automatically managed components
// *Note* - this logic should NOT be modified
try {
_init();
} catch (Exception e) {
log("personal Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
}

//
// Perform application initialization that must complete
// *after* managed components are initialized
// TODO - add your own initialization code here
}

/**
*

Callback method that is called after the component tree has been
* restored, but before any event processing takes place. This method
* will only be called on a postback request that
* is processing a form submit. Customize this method to allocate
* resources that will be required in your event handlers.

*/
@Override
public void preprocess() {
}

/**
*

Callback method that is called just before rendering takes place.
* This method will only be called for the page that
* will actually be rendered (and not, for example, on a page that
* handled a postback and then navigated to a different page). Customize
* this method to allocate resources that will be required for rendering
* this page.

*/
@Override
public void prerender() {
}

/**
*

Callback method that is called after rendering is completed for
* this request, if init() was called (regardless of whether
* or not this was the page that was actually rendered). Customize this
* method to release resources acquired in the init(),
* preprocess(), or prerender() methods (or
* acquired during execution of an event handler).

*/
@Override
public void destroy() {
}

public void checkbox1_processValueChange(ValueChangeEvent event) {
}

public String consulta2_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case2";
}
private TextField area1 = new TextField();

public TextField getArea1() {
return area1;
}

public void setArea1(TextField tf) {
this.area1 = tf;
}

private Alert alert2 = new Alert();

public Alert getAlert2() {
return alert2;
}

public void setAlert2(Alert a) {
this.alert2 = a;
}
private Alert alert1 = new Alert();

public Alert getAlert1() {
return alert1;
}

public void setAlert1(Alert a) {
this.alert1 = a;
}

public String guardar_action() {

JTable dat=new JTable();
DefaultTableModel j=(DefaultTableModel) dat.getModel();
dat.setModel(j);
j.setColumnCount(7);
j.setRowCount(1);
j.setValueAt(id_empleado2.getText(), 0, 0);
j.setValueAt(nombre.getText(), 0, 1);
j.setValueAt(apellido.getText(), 0, 2);
j.setValueAt(telefono.getText(), 0, 3);
j.setValueAt(direccion.getText(), 0, 4);
j.setValueAt(cargo.getText(), 0, 5);
j.setValueAt(fecha_ingreso.getText(), 0, 6);
j.setValueAt(fecha_salida.getText(), 0, 7);
j.setValueAt(tipo_capacitacion.getText(), 0, 8);

if(comprobar()){

//desactivo el boton de guardar

//creo la conexion a la base de datos
conection c=new conection("localhost/porcinos","root","123456");
//guardo la consulta en un string y le concateno el valor del jtextfield junto con los de la tabla
String consulta="INSERT INTO porcinos.personal ('id_empleado', 'nombre', 'apellido', 'telefono', 'direccion', 'cargo', 'fecha_ingreso','fecha_salida','tipo_capacitacion') VALUES('"+Integer.parseInt((String)j.getValueAt(0, 0))+"','"+(String)j.getValueAt(0, 1)+"','"+(String)j.getValueAt(0, 2)+"','"+Integer.parseInt((String)j.getValueAt(0, 3))+"','"+(String)j.getValueAt(0, 4)+"','"+(String)j.getValueAt(0, 5)+"','"+(String)j.getValueAt(0, 6)+"','"+(String)j.getValueAt(0,7)+"','"+(String)j.getValueAt(0, 8)+"')";

//lo debemos atrapar dentro de un TRY por que es una exception marcada.
try{
//creamos el Statement para hacer consultas
java.sql.Statement st=c.conection().createStatement();
/*aqui ejecutamos la consulta y la comprobamos ya que el metodo executeUpdate manda un int de
las fias afectadas*/

if

(st.executeUpdate(consulta)==1){
//solo despliego un cuadro texto para dar aviso
alert2.setVisible(false);
alert1.setVisible(true);

id_empleado2.setText("");
nombre.setText("");
apellido.setText("");
telefono.setText("");
direccion.setText("");
cargo.setText("");
fecha_ingreso.setText("");
fecha_salida.setText("");
tipo_capacitacion.setText("");

}
else
{
alert2.setVisible(true);
}
}

catch(

java.sql.SQLException e){
e.printStackTrace();
alert2.setVisible

(true);
alert1.setVisible

(false);
}
}
return null;
}

public String button1_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case1";
}

public String button4_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return null;
}

public String button5_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return null;
}

public String INICIO_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case3";
}

private boolean comprobar() {

conection c=new conection("localhost/porcinos","root","123456");
//guardo la consulta en un string y le concateno el valor del jtextfield junto con los datos de la tabla
//en esta consulta SQL deseo saber si ya existe tanto la matricula como el nombre
String consulta="SELECT * FROM porcinos.personal WHERE (id_empleado='"+id_empleado2.getText()+"') AND (id_empleado='"+id_empleado2.getText()+"')";
//lo debemos atrapar dentro de un TRY por que es una exception marcada.
try{
//creamos el Statement para hacer consultas
java.sql.Statement st=c.conection().createStatement();
java.sql.ResultSet rs=st.executeQuery(consulta);
//voy a comprobar si ya existe un registro.
if(rs.next()){
//solo despliego un cuadro texto para dar aviso
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}else{
//aqui verificare si ya Existe la Matricula
consulta="SELECT * FROM porcinos.personal WHERE id_empleado='"+id_empleado2.getText()+"'";
rs=st.executeQuery(consulta);
if(rs.next()){
//mando un mensaje en pantalla
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}else{
//aqui verificare si ya Existe el Nombre
consulta="SELECT * FROM porcinos.personal WHERE id_empleado='"+id_empleado2.getText()+"'";

rs=st.executeQuery(consulta);
if(rs.next()){
//mando un mensaje en pantalla
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}
else
{
return true;
}
}
}
}
catch(java.sql.SQLException e){
e.printStackTrace();
return false;
}
}

}

Gracias espero respuestas es urgente

Imagen de cfpmx

RE: Gracias por compartir

Hola Javier, me parecen muy buenas las recomendaciones que das, aunque la número 4 a pesar de que no está mal, es una muy buena práctica realizar todas todas esas declaraciones redundantes, ya que se presta menos a confusiones y el código es mas claro.

Imagen de cfpmx

Sobre la numero 4.

"It's a good idea to initialize all your variables, even if you're assigning them
with the default value. Your code will be easier to read; programmers who
have to maintain your code (after you win the lottery and move to Tahiti) will
be grateful."

Referencias: Sun Certified Programmer for Java 6 Study Guide; Kathy Sierra; Pág 242.

Imagen de luxspes

Incializar si tiene sentido

De hecho, inicializar todas las variables, asi nomas por que si, no es buena idea, me a tocado ver mucho codigo donde se hacen cosas como:

String cadena = new String();
cadena="Algun valor";

(Lo cual no solo es redundante si no tambien ineficiente) Uno debe inicializar las variables solo si tiene sentido hacerlo

Imagen de klone

De echo no se deven

De echo no se deven inicializar variables a lo loco XD ya que cada vez que pones el new estas reservando espacio en memoria (de la maquina virtual) de una variable ni utilizaras hasta dentro de unos cuantos metodos

Metodo Eliminacion cualquier dato??

hola q tal amigos de java, mi pregunta es la siguiente dado q hay un metodo eliminacion, como seria el metodo eliminacion de cualquier dato, es decir guiandose por el dato insertado, y q en esa poscicion eliminemos ese dato, y apunte a nuestro siguiente nodo???
porq lo trate de hacer pero nada mas no me funciona :(... dado q soy nuevo en java

se pude decir q en en c es asi
1. El primer paso es buscar el elemento a borrar que será apuntado por aux y el elemento anterior será apuntado por ant.
2. ant -> siguiente cogerá el valor de aux -> siguiente.
3. Liberamos aux.

ahora en java como quedaria???

listas sencillamente enlazadas

buenas necesito ayuda con un program que tengo q realizar en netbeans de listas senciillamente enlazadas.
necesito montar una lista sencillamente enlazada para encontrar un bibliotecario, el codigo, nombre y genero y autor son datos que debn registrarse.
se desea obtener un listado de todos los libros registrados, ademas establecer la exitencia de un libro y en tal caso mostrar sus datos.
les agradezco que me ayuden :D

Ayuda

Oye, como mando llamar los metos en una clase principal?
apenas estoy empezando en esto y la vda es interesante pero tmbn muy confuso, espero que alguien me pueda ayudar ;)

Imagen de Josh_app

metodos

bueno si con metos te refieres a metodos es muy facil solo deblara tu metodo por ejemplo

int sumaEnteros ( int a, int b ) {
int c = a + b;
return c;
}

y dentro de la clase principal lo mandas llamar ingresando dentro de los parametros las variables que mandaras hacia el mismo...

sumaEnteros(x,y);

espero q te sirva...

Metodos

esque dice que falta el constructor... y como eh utilizado metodos en una clase , donde me sale el Public Static void ( main String() ) bueno algoo asi que es el que te hace ejecutar el programa. entonses lo intento poner en su lugar en el codigo de arriba y me marka error en los corchetes al final, entonses quiciera saber si por metodos sse puede utilizar el codigo de arriba...

ayuda

hola buenos dias estoy estudiando informatica en venezuela y no majeo muy bien esto de la estructura de datos estoy que raspo la materia me mandaron un taller para recuperla de estrucura de datos hacer cuatro progrmas de lista pila cola y arbol con menu y no se nada de eso estoy buscando personas que quieran ayudarme estoy muy urgido si por favor alguien sabe aqui en caracas venezuela quien los hace yo los pago

Me sale error

Me sale el siguiente error al copiar el programa:

error: class, interface, or enum expected
import javax.swing.JOptionPane;
^

me podria ayudar alguien??

Imagen de Sr. Negativo

Ayuda al "error"

Solo es el orden,pega este código tal y como esta
ListaS.java

import javax.swing.JOptionPane;
/**
 *
 * @author Pain
 */

public class ListaS {
    private Nodo primero;
    private Nodo ultimo;
    private int tamano;
    public ListaS() {
        this.primero = null;
        this.ultimo = null;
        this.tamano = 0;
    }
//Metodo utilizado para denotar que la lista se encuentra vacia.
    public boolean siVacio() {
        return (this.primero == null);
    }
//Metodo para agregar al final de la lista.
    public ListaS addLast(int dato) {
        if(siVacio()) {
            Nodo nuevo = new Nodo(dato);
            primero = nuevo;
            ultimo = nuevo;
            nuevo.nodoDer = nuevo;
        }
        else {
            Nodo nuevo = new Nodo(dato);
            nuevo.nodoDer = null;
            ultimo.nodoDer = nuevo;
            ultimo = nuevo;
        }
        this.tamano++;
        return this;
    }
//Metodo para borrar al final de la lista.
    public Nodo deleteLast() {
        Nodo eliminar = null;
        if(siVacio()) {
            JOptionPane.showMessageDialog(null, "La lista se encuentra vacia");
            return null;
        }
        if(primero == ultimo) {
            primero = null;
            ultimo = null;
        }
        else {
            Nodo actual = primero;
            while(actual.nodoDer != ultimo) {
                actual = actual.nodoDer;
            }
            eliminar = actual.nodoDer;
            actual.nodoDer = null;
            ultimo = actual;
        }
        this.tamano--;
        return eliminar;
    }
//Metodo que imprime el tamaño de la lista.
    public void tamano() {
        JOptionPane.showMessageDialog(null, "El tamaño es:\n " + this.tamano);
    }
//Metodo que imprime la lista y los valores ingresados.
    public void imprimir() {
        if(tamano != 0) {
            Nodo temp = primero;
            String str = "";
            for(int i = 0; i < this.tamano; i++) {
                str = str + temp.dato + "\n";
                temp = temp.nodoDer;
            }
            JOptionPane.showMessageDialog(null, str);
        }
    }
       
       
        /*
 * Lista Simplemente enlazada.
 *
 */

/**
 *
 * @author Pain
 */

//Clase Nodo. Utiliza el enlace llamado nodoDer o nodo derecho y el valor a introducir.
public class Nodo {
    Nodo nodoDer;
    int dato;
    public Nodo(int dato) {
        this.dato = dato;
        this.nodoDer = null;
    }
}
/*
 * Clase de Lista enlazada y metodos de agregar al final y borrar del mismo, asi como mostrar tamaño y visualizar lista.
 *
 */

       
       
       
}

Gracias

Ya no me marca el error pero a la hora de correr el programa me manda un mensaje que dice:

"No main methods, applets, or MIDlets found in file"

Imagen de Sr. Negativo

Main

No hay método main en la aplicación ... ¿no lo notaste?

0_o

Si lo note

Si lo no te, lo que pasa es que donde estoy estudiando nos pusieron a copiar ese programa y tenemos que explicar como es que funciona cada método del mismo. Entonces ¿qué es lo que hace este programa o como puedo hacer para que corra?

muy bueno gracias por el

muy bueno gracias por el aporte, solo tengo una pregunta como puedo buscar un nodo en una lista?? necesito que lo busque y me diga donde esta el nodo saludos y gracias muy bueno