¿Por qué tener una clase padre de lista enlazada

Sonali Gupta:

Esta es una pregunta general, tal vez sobre el concepto programación orientada a objetos. Estoy empezando con la aplicación DS en JAVA. Estoy tratando de poner en práctica lista enlazada y en todos los rsources en línea, veo una práctica similar:

  1. Hacer una clase nodo.
  2. Construir una lista enlazada clase que tiene un objeto de nodo.

Del mismo modo vi por pila, colas y árboles. Mi pregunta es, si puedo implementar ListaEnlazada tan solo por tener una clase que se parece a continuación:

 class LinkList {
     int data;
     LinkList next; }

Todavía soy capaz de hacer todas las operaciones. Por lo que el concepto de tener una segunda clase que contiene una raíz o una cabecera es sólo para fines programación orientada a objetos o algo más? Escribí el siguiente código y funciona todo bien y sin la necesidad de tener un puntero de cabecera. Yo uso una variable referencias en todos los métodos y el objeto de la clase principal conserva la pista de la cabeza.

/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class LinkList {
    int data;
    LinkList next;

    LinkList(){
        data = 0;
        next = null;
    }

    LinkList(int data) {
        this.data = data;
        next = null;
    }
    LinkList insertAtBegin(int data){
        LinkList newBegin = new LinkList(data);
        newBegin.next = this;
        return newBegin;
    }
    void insertAtPlace(int data, int insertData){
        LinkList newNode = new LinkList(insertData);
        LinkList iterator = this;
        while(iterator!=null && iterator.data!=data){
            iterator = iterator.next;
        }
        if(iterator.data == data)
        {
            newNode.next = iterator.next;
            iterator.next = newNode;
        }
    }
    void insertAtLast(int data) {
        if(next == null){
            next = new LinkList(data);
        }
        else{
            next.insertAtLast(data);
        }
    }

}

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        LinkList linkList = new LinkList(6);
        linkList.insertAtLast(5);
        linkList.insertAtLast(3);
        linkList.insertAtLast(2);
        linkList.insertAtLast(1);

        linkList = linkList.insertAtBegin(10);
        LinkList iterator = linkList;
        while(iterator!=null){
            System.out.print(iterator.data);
            iterator = iterator.next;
        }
        System.out.print("\n");
        linkList.insertAtPlace(5,-1);
        iterator = linkList;
        while(iterator!=null){
            System.out.print(iterator.data);
            iterator = iterator.next;
        }
    }
}
Eran :

Usted debe hacer un seguimiento de la cabeza en algún lugar de la lista enlazada. De lo contrario, ¿cómo iterar sobre la lista entera, o buscar un elemento en la lista?

Si su LinkListes esencialmente un nodo (con los datos y la referencia a la siguiente nodo), que tendría que poner en práctica todas las operaciones de listas enlazadas (añadir, borrar, etc ...) de alguna clase separada que mantiene un registro del nodo de cabecera de la lista.

Esto trae de vuelta a una clase de lista enlazada que utiliza una clase nodo.

En cuanto al código añadido, LinkList insertAtBegin(int data)sólo insertar un nodo al principio de la lista si usted lo llama en el primer nodo de la lista. Pero de que no hay nada que le para de llamar en cualquier nodo de la lista, en cuyo caso será esencialmente devolver una nueva lista que comienza con los nuevos elementos y termina con una sub-lista de la lista original.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227012&siteId=1
Recomendado
Clasificación