Come faccio a creare una Lista Collegata una Struttura di Dati in Java?[chiuso]
-
08-06-2019 - |
Domanda
Qual è il modo migliore per fare un elenco collegato in Java?
Soluzione
La soluzione più ovvia per gli sviluppatori che hanno familiarità per Java è quello di utilizzare la LinkedList classe già fornito in java.util.Dire, tuttavia, che si voleva fare la vostra propria implementazione per qualche motivo.Ecco un rapido esempio di una lista collegata che inserisce un nuovo link all'inizio della lista, elimina dall'inizio della lista e scorre l'elenco per stampare i link in esso contenuti. Miglioramenti a questa implementazione comprendere la realizzazione di un double-linked list, aggiungendo metodi per inserire e eliminare da metà o fine, e con l'aggiunta di ottenere e sorta metodi di ricerca.
Nota:Nell'esempio, l'oggetto di Collegamento, che in realtà non contengono altro oggetto Link - nextLink in realtà è solo un riferimento ad un altro 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();
}
}
Altri suggerimenti
Java ha una LinkedList attuazione, che si potrebbe desiderare di check-out.È possibile scaricare il JDK e fonti a java.sun.com.
Utilizzare java.util.LinkedList.Come questa:
list = new java.util.LinkedList()
La lista qui sopra collegato display in direzione opposta.Penso che la corretta applicazione del metodo di inserimento deve essere
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;
}
}
La sua molto meglio per l'utilizzo di java.util.LinkedList, perché è probabilmente molto più ottimizzato, rispetto a quello che si scrive.
//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;
}
}
}
}