Hauptinhalt:
Laden Sie einfach den Code hoch, er ist so ungehindert ~~~
Paket pers.ty. $ 1101Datastructure; import Java.util.hashtable;/*** @Author Administrator* Implementieren Sie die grundlegenden Operationen von einzelnen verknüpften Listen, Hinzufügen von Deletionknoten, Sortieren, Drucklänge und Berechnungslänge*/öffentliche Klassenmylinkedlist {node head Insertionsdaten*/ public void addnode (int d) {node newnode = neuer node (d); if (head == null) {head = newnode; zurückkehren; } Node tmp = Kopf; while (tmp.next! = null) {tmp = tmp.next; } // Knoten zum Ende tmp.next = newnode; }/*** @param Index: Index -Knoten löschen* @return kehrt wahr erfolgreich zurück und kehrt falsche zurück, wenn fehlgeschlagen*/public boolean deleteNode (int index) {if (index <1 || index> length ()) {return false; // Die Elementposition nicht trennen} // Das erste Element löschen. zurückkehren; } int i = 1; Node prenode = Kopf; Node curnode = prenode.next; while (curnode! zurückkehren; } prenode = curnode; Curnode = Curnode.Next; i ++; } Return true; } / ** * @return return die Länge der verlinkten Listlänge * / public int länge () {int länge = 0; Knoten TMP = Kopf; while (tmp! = null) {Länge ++; tmp = tmp.Next; } Rückkehrlänge; } / *** Sortieren Sie die verknüpfte Liste* @return geben den sortierten Header -Knoten zurück* / public node orderlist () {node nextnode = null; int temp = 0; Knoten curnode = Kopf; while (curnode.Next! = null) {NextNode = Curnode.Next; while (NextNode! Curnode.data = NextNode.data; NextNode.data = temp; } NextNode = NextNode.Next; } Curnode = Curnode.Next; } Rückkehrkopf; } / *** Alle Daten in der verlinkten Liste ausdrucken* / public void printlist () {node tmp = head; while (tmp! = null) {System.out.print (tmp.data+""); tmp = tmp.Next; } System.out.println (); } /*** Die erste Möglichkeit zum Löschen von Daten aus der verknüpften Liste* Überqueren Sie die verknüpfte Liste und speichern Sie die durchquerten Daten in einen Hashtable. Während des Traversal -Prozesses können Sie ihn löschen, wenn der derzeit auf Zugriff auf Wert vorhandene Wert vorhanden ist. Knoten TMP = Kopf; Knoten PRE = NULL; while (tmp! sonst {table.put (tmp.data, 1); pre = tmp; } tmp = tmp.next; }} / *** Die zweite Möglichkeit zum Löschen von doppelten Daten aus der verknüpften Liste* Double Loop -Traversal* Die Vor- und Nachteile sind offensichtlich* / public void Deleteduplecate2 () {Knoten p = Kopf; while (p! = null) {Knoten q = p; while (Q.Next! } else {q = Q.Next; }} p = P.Next; }} /*** @param k: Finden Sie den K-Th bis zum letzten Knoten in der verknüpften Liste* @return diesen Knoten* Legen Sie zwei Zeiger P1 und P2 fest, um P2 K schneller als P1 zu machen, und durchqueren Sie gleichzeitig nach hinten. Wenn p2 leer ist, ist p1 der k-h bis zum letzten Knoten*/ öffentlicher Knoten Findelem (Knotenkopf, int k) {if (k <1 || k> this.Length ()) return null; Knoten p1 = Kopf; Knoten P2 = Kopf; für (int i = 0; i <k-1; i ++) p2 = p2.Next; while (p2.Next! = null) {p2 = p2.Next; p1 = P1.Next; } return p1; } / *** Implementieren Sie die Umkehrung der verknüpften Liste* @param Head Der Kopfknoten der verknüpften Liste* / public void reverseIterativ (Knotenkopf) {Knoten Preversedhead = Head; Node pnode = Kopf; Knoten pprev = null; while (pnode! = null) {node pnext = pnode.Next; if (pNext == null) preversedhead = pnode; pnode.next = pprev; pprev = pnode; pnode = pNext; } this.head = Preversedhead; } / *** Ausgabe einer einzelnen verknüpften Liste vom Schwanz zum Kopf durch rekursiv* @param head* / public void printlistrevery (Knotenkopf) {if (head! = Null) {printlistRevery (head.next); System.out.print (head.data+""); }} / *** Abfragen Sie den Zwischenknoten einer einzelnen verknüpften Liste* Definieren Sie zwei Zeiger, einen Schritt nacheinander und die anderen beiden Schritte gleichzeitig ...* @param head* @return q ist der Zwischenknoten* / öffentlicher Knoten SearchMid (Knotenkopf) {Knoten Q = Kopf; Knoten p = Kopf; while (p! = null && P.Next! = null && p.Next.Next! p = P.Next.Next; } return q; } / *** Löschen Sie den angegebenen Knoten, ohne den Kopfzeiger zu kennen. if (n == null || n.Next == null) return false; int tmp = n.data; n.data = n.next.data; N.Next.data = tmp; N.Next = N.Next.Next; zurückkehren; } / *** Bestimmen Sie, ob zwei verknüpfte Listen kreuzen* Wenn sich zwei verknüpfte Listen kreuzen, müssen die gleichen Heckknoten vorhanden sein, die beiden verknüpften Listen aufzeichnen, die Tail -Knoten aufzeichnen, ob sie gleich sind. H2) {if (h1 == null || h2 == null) return false; Knoten Tail1 = H1; while (Tail1.Next! = null) {Tail1 = Tail1.Next; } Knoten Tail2 = H2; while (Tail2.Next! = null) {Tail2 = Tail2.Next; } return tail1 == Tail2; } / ** * Finden Sie den ersten Knoten, der sich kreuzt * @param h1 * @param h2 * @return * / public node getfirstmeetnode (Knoten H1, Knoten H2) {if (h1 == null || h2 == null) return null; Knoten Tail1 = H1; int len1 = 1; while (Tail1.Next! = null) {Tail1 = Tail1.Next; Len1 ++; } Knoten Tail2 = H2; int len2 = 1; while (Tail2.Next! = null) {Tail2 = Tail2.Next; Len2 ++; } if (Tail1! = Tail2) {return null; } Knoten T1 = H1; Knoten T2 = H2; // Die länger verknüpfte Liste finden und durchgehen if (len1> len2) {int d = len1-len2; while (d! = 0) {t1 = t1.Next; D--; }} if (len1 <len2) {int d = len2-len1; while (d! = 0) {t2 = t2.Next; D--; }} while (t1! = t2) {t1 = t1.next; t2 = t2.Next; } return t1; } public static void main (String [] args) {MylinkedListliste = new MyLinkedList (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit eines jeden hilfreich sein wird. Ich hoffe auch, Wulin.com mehr zu unterstützen!