Question

Quelle est la meilleure façon de créer une liste chaînée en Java ?

Était-ce utile?

La solution

La solution évidente pour les développeurs familiers avec Java est d'utiliser le Liste liée cours déjà prévu dans java.util.Supposons cependant que vous vouliez créer votre propre implémentation pour une raison quelconque.Voici un exemple rapide de liste chaînée qui insère un nouveau lien au début de la liste, supprime depuis le début de la liste et parcourt la liste pour imprimer les liens qu'elle contient. Améliorations à cette mise en œuvre inclut d'en faire un liste à double lien, en ajoutant des méthodes à insérer et supprimer du milieu ou de la fin, et en ajoutant obtenir et trier les méthodes également.

Note:Dans l'exemple, l'objet Link ne contient pas réellement d'autre objet Link - suivantLien n'est en fait qu'une référence à un autre lien.

class Link {
    public int data1;
    public double data2;
    public Link nextLink;

    //Link constructor
    public Link(int d1, double d2) {
        data1 = d1;
        data2 = d2;
    }

    //Print Link data
    public void printLink() {
        System.out.print("{" + data1 + ", " + data2 + "} ");
    }
}

class LinkList {
    private Link first;

    //LinkList constructor
    public LinkList() {
        first = null;
    }

    //Returns true if list is empty
    public boolean isEmpty() {
        return first == null;
    }

    //Inserts a new Link at the first of the list
    public void insert(int d1, double d2) {
        Link link = new Link(d1, d2);
        link.nextLink = first;
        first = link;
    }

    //Deletes the link at the first of the list
    public Link delete() {
        Link temp = first;
        if(first == null){
         return null;
         //throw new NoSuchElementException(); // this is the better way. 
        }
        first = first.nextLink;
        return temp;
    }

    //Prints list data
    public void printList() {
        Link currentLink = first;
        System.out.print("List: ");
        while(currentLink != null) {
            currentLink.printLink();
            currentLink = currentLink.nextLink;
        }
        System.out.println("");
    }
}  

class LinkListTest {
    public static void main(String[] args) {
        LinkList list = new LinkList();

        list.insert(1, 1.01);
        list.insert(2, 2.02);
        list.insert(3, 3.03);
        list.insert(4, 4.04);
        list.insert(5, 5.05);

        list.printList();

        while(!list.isEmpty()) {
            Link deletedLink = list.delete();
            System.out.print("deleted: ");
            deletedLink.printLink();
            System.out.println("");
        }
        list.printList();
    }
}

Autres conseils

Java a un Liste liée mise en œuvre, que vous voudrez peut-être vérifier.Vous pouvez télécharger le JDK et ses sources sur java.sun.com.

Utiliser java.util.LinkedList.Comme ça:

list = new java.util.LinkedList()

La liste chaînée ci-dessus s’affiche dans la direction opposée.Je pense que la mise en œuvre correcte de la méthode insert devrait être

public void insert(int d1, double d2) { 
    Link link = new Link(d1, d2); 

    if(first==null){
        link.nextLink = null;
        first = link; 
        last=link;
    }
    else{
        last.nextLink=link;
        link.nextLink=null;
        last=link;
    }
} 

Il est préférable d'utiliser java.util.LinkedList, car il est probablement beaucoup plus optimisé que celui que vous allez écrire.

//slightly improved code without using collection framework

package com.test;

public class TestClass {

    private static Link last;
    private static Link first;

    public static void main(String[] args) {

        //Inserting
        for(int i=0;i<5;i++){
            Link.insert(i+5);
        }
        Link.printList();

        //Deleting
        Link.deletefromFirst();
        Link.printList();
    }


    protected  static class Link {
        private int data;
        private Link nextlink;

        public Link(int d1) {
            this.data = d1;
        }

        public static void insert(int d1) {
            Link a = new Link(d1);
            a.nextlink = null;
            if (first != null) {
                last.nextlink = a;
                last = a;
            } else {
                first = a;
                last = a;
            }
            System.out.println("Inserted -:"+d1);
        }

        public static void deletefromFirst() {
            if(null!=first)
            {
                System.out.println("Deleting -:"+first.data);
                first = first.nextlink;
            }
            else{
                System.out.println("No elements in Linked List");
            }
        }

        public static void printList() {
            System.out.println("Elements in the list are");
            System.out.println("-------------------------");
            Link temp = first;
            while (temp != null) {
                System.out.println(temp.data);
                temp = temp.nextlink;
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top