La copie de code est la suivante:
/ **
* Implémentation de listes liées bidirectionnelles
* @author skip
* @version 1.0
* /
classe publique DoubleNodeList <T> {
// classe de nœud
Node de classe statique privée <T> {
Nœud <t> perv; // nœud avant
Nœud <t> suivant; // dernier nœud
T données; // données
Node public (t t) {
this.data = t;
}
}
nœud privé <T> tête; // nœud de tête
nœud privé <T> dernier; // nœud de queue
Node privé <T> Autre; // Fonctionnement temporaire pour le stockage des nœuds de secours
private int longueur; // longueur de la liste liée
/ **
* Structure non glycopique
* /
DoubleNodeList public () {
head = nouveau nœud <t> (null);
dernier = tête;
longueur = 0;
}
/ **
* Créez un nœud lors de l'initialisation
* Données @param
* /
DoubleNodeList public (T Data) {
head = nouveau nœud <T> (données);
dernier = tête;
longueur = 1;
}
/ **
* Ajouter un nœud
* @Param Data Ajout des données
* /
public void add (t data) {
if (isEmpty ()) {
head = nouveau nœud <T> (données);
dernier = tête;
longueur ++;
}autre{
// Méthode d'insertion de la queue
autre = nouveau nœud <T> (données);
autre.perv = dernier;
Last.Next = autre;
dernier = autre;
longueur ++;
}
}
/ **
* Insérez un nœud après avoir spécifié les données
* Données @param Données spécifiées
* @param insertdata insérée données
* @return Renvoie vrai si l'insertion est réussie, fausse si l'insertion est infructueuse.
* /
public booléen addafert (t data, t insertData) {
Autre = tête;
tandis que (autre! = null) {
if (autre.data.equals (data)) {
Node <T> T = nouveau nœud <T> (insertData);
t.perv = autre;
t.next = autre.next;
autre.next = t;
// juger de savoir s'il faut ajouter des nœuds après le dernier nœud
if (t.next == null) {
dernier = t;
}
longueur ++;
Retour Vrai;
}
autre = autre.Next;
}
retourne false;
}
/ **
* Insérez un nœud avant de spécifier les données
* Données @param Données spécifiées
* @param insertdata insérée données
* @return Renvoie vrai si l'insertion est réussie, fausse si l'insertion est infructueuse.
* /
public boolean addBefore (t data, t insertData) {
Autre = tête;
tandis que (autre! = null) {
if (autre.data.equals (data)) {
Node <T> T = nouveau nœud <T> (insertData);
t.perv = autre.perv;
t.next = autre;
autres.perv.next = t;
longueur ++;
Retour Vrai;
}
autre = autre.Next;
}
retourne false;
}
/ **
* Obtenez les données à l'index
* index de l'indice @param
* Données @return
* /
public t get (int index) {
if (index> longueur || index <0) {
lancer un nouvel indexoutofboundSexception ("index:" + index);
}
Autre = tête;
pour (int i = 0; i <index; i ++) {
autre = autre.Next;
}
retourner autre.data;
}
/ **
* Une nouvelle valeur remplace la valeur ancienne
* @return Le succès est vrai, non trouvé comme faux
* /
ensemble booléen public (t oldvalue, t newValue) {
Autre = tête;
tandis que (autre! = null) {
if (autre.data.equals (oldvalue)) {
autre.data = newValue;
Retour Vrai;
}
autre = autre.Next;
}
retourne false;
}
/ **
* Retirez l'élément spécifié
* Éléments de données @param qui doivent être supprimés
* @return n'existe pas et est vrai pour le succès
* /
Public Boolean Suppter (T DATA) {
Autre = tête;
tandis que (autre! = null) {
if (autre.data.equals (data)) {
autre.perv.next = autre.Next;
longueur--;
Retour Vrai;
}
autre = autre.Next;
}
retourne false;
}
/ **
* Si cet élément est inclus dans la liste liée
* @return inclus comme vrai, pas faux
* /
Booléen public contient (t data) {
Autre = tête;
tandis que (autre! = null) {
if (autre.data.equals (data)) {
Retour Vrai;
}
autre = autre.Next;
}
retourne false;
}
/ **
* Obtenez les données du dernier nœud
* @return Données du dernier nœud
* /
public t getlast () {
return Last.Data;
}
/ **
* Obtenez les données du premier nœud
* @return les données du premier nœud
* /
public t getFirst () {
Retour Head.Data;
}
/ **
* Obtenez la durée de la liste liée
* @return longueur
* /
public int getSize () {
longueur de retour;
}
/ **
* Est-ce une table de liens vide
* @return La liste vide est vraie, et la liste non vide est fausse
* /
public booléen iSempty () {
longueur de retour == 0;
}
/ **
* Effacer la liste des liens
* /
public void clear () {
tête = null;
longueur = 0;
}
/ **
* Sortir tous les nœuds de la liste liée
* /
public void printlist () {
if (isEmpty ()) {
System.out.println ("Liste liée vide");
}autre{
Autre = tête;
pour (int i = 0; i <longueur; i ++) {
System.out.print (autre.data + "");
autre = autre.Next;
}
System.out.println ();
}
}
}