C'est une question générale, peut-être à propos du concept de POO. Je viens juste de commencer avec l'implémentation de DS en JAVA. J'essaie d'implémenter une liste chaînée et sur toutes les ressources en ligne, je vois une pratique similaire :
- Crée une classe node.
- Crée une classe Linked List qui a un objet node.
J'ai vu la même chose pour les piles, files et arbres. Ma question est, si j'implémente LinkedList en n'ayant qu'une seule classe qui ressemble à ceci :
class LinkList {
int data;
LinkList next; }
Je suis toujours capable de faire toutes les opérations. Donc le concept d'avoir une deuxième classe qui contient une racine ou un en-tête est seulement pour un but de POO ou autre chose ? J'ai écrit le code suivant et il fonctionne très bien sans avoir besoin d'un pointeur d'en-tête. J'utilise une variable de référence dans toutes les méthodes et l'objet de la classe principale garde toujours la trace de la tête.
/* package codechef; // ne placez pas le nom du package ! */
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);
}
}
}
/* Le nom de la classe doit être "Main" uniquement si la classe est publique. */
class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
// votre code va ici
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;
}
}
}