Frage

Was ist der beste Weg, um eine verknüpfte Liste in Java?

War es hilfreich?

Lösung

Die offensichtliche Lösung für Entwickler vertraut zu Java ist die Verwendung der LinkedList Klasse bereits vorhanden java.util.Sagen, jedoch, Sie wollten Ihre eigene Implementierung für einige Grund.Hier ist ein schnelles Beispiel für eine verknüpfte Liste, die fügt einen neuen link an den Anfang der Liste, löscht ab Anfang der Liste aus und Schleifen Sie durch die Liste zu drucken, die auf links in es. Erweiterungen zu dieser Implementierung gehören, dass es eine doppelt verkettete Liste, das hinzufügen von Methoden zu einfügen und löschen von der Mitte oder am Ende, und durch hinzufügen von Holen Sie sich und Sortieren Methoden.

Hinweis:In dem Beispiel, das Link-Objekt nicht tatsächlich enthalten andere Link-Objekt - nextLink ist tatsächlich nur ein Verweis auf einen anderen link.

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();
    }
}

Andere Tipps

Java hat eine LinkedList Umsetzung, dass Sie vielleicht wanna check out.Sie können die JDK-und es ist Quellen java.sun.com.

Verwenden java.util.LinkedList.Wie diese:

list = new java.util.LinkedList()

Der oben verlinkten Liste Anzeige in die entgegengesetzte Richtung.Ich denke, dass die korrekte Implementierung der insert-Methode sein sollte

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;
    }
} 

Es ist viel besser, verwenden Sie java.util.LinkedList, weil es wahrscheinlich viel mehr optimiert, als die, die Sie schreiben.

//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;
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top