Основной контент:
Просто загрузите код, это так безудержно ~~~
package pers.ty.$1101datastructure;import java.util.Hashtable;/** * @author Administrator * Implement the basic operations of single linked lists, adding deletion nodes, sorting, printing, and calculating length*/public class MyLinkedList { Node head = null;//The function of linked list headers/** Insert data into the linked list* @param d: the content of the Данные вставки*/ public void addNode (int d) {node newnode = new Node (d); if (head == null) {head = newnode; возвращаться; } Узел tmp = head; while (tmp.next! = null) {tmp = tmp.next; } // Добавить узел, чтобы завершить tmp.next = newnode; }/*** @param Index: УДОДОВАТЬ Индекс Узел* @return возвращает True успешно и возвращает false, если не удастся*/public boolean deleteNode (int index) {if (index <1 || index> length ()) {return false; // Удалить позицию элемента infesable} // Удалить первый элемент в ссылке списка, если (index == 1) {Head xtex stex = xtex; вернуть истину; } int i = 1; Узел Prenode = Head; Node curnode = prenode.next; while (curnode! = null) {if (i == index) {prenode.next = curnode.next; вернуть истину; } prenode = curnode; curnode = curnode.next; i ++; } вернуть true; } / ** * @return возвращает длину связанной длины списка * / public int length () {int length = 0; Узел TMP = Head; while (tmp! = null) {length ++; tmp = tmp.next; } return длины; } / *** Сортировка связанного списка* @return возвращает отсортированный узел заголовка* / public Node OrderList () {node nextNode = null; int temp = 0; Node Curnode = Head; while (curnode.next! = null) {nextnode = curnode.next; while (nextnode! = null) {if (curnode.data> nextnode.data) {temp = curnode.data; curnode.data = nextnode.data; nextnode.data = temp; } nextNode = nextNode.next; } curnode = curnode.next; } return Head; } / *** Распечатать все данные в связанном списке* / public void printList () {node tmp = head; while (tmp! = null) {System.out.print (tmp.data+""); tmp = tmp.next; } System.out.println (); } /*** Первый способ удаления данных из связанного списка* Перейти связанный список и хранить данные об отслеживании в хэштебу. Во время процесса обхода, если доступ к нынешнему значению существует в хэштате*, вы можете удалить его*Преимущества: низкая сложность времени: требуется дополнительное пространство для хранения для сохранения доступных данных*/ public void deleteduplecate1 () {hashtable <Integer, Integer> Taste = new Hashtable <Integer, Integer> ();); Узел TMP = Head; Узел pre = null; while (tmp! = null) {if (table.containskey (tmp.data)) pre.next = tmp.next; else {table.put (tmp.data, 1); pre = tmp; } tmp = tmp.next; }} / *** Второй способ удалить дубликаты данных из связанного списка* Двойной цикл траверса* Преимущества и недостатки очевидны* / public void leteteduplecate2 () {node p = head; while (p! = null) {узел q = p; while (q.next! = null) {if (p.data == q.next.data) {q.next = q.next.next; } else {q = q.next; }} p = p.next; }} /*** @param k: Найдите K-й до последнего узла в связанном списке* @return Этот узел* Установите два указателя P1 и P2, чтобы сделать P2 K быстрее, чем P1, и одновременно пройти назад. Когда P2 пуст, P1-это k-th до последнего узла*/ public node findelem (head узла, int k) {if (k <1 || k> this.length ()) return null; Узел P1 = голова; Узел P2 = голова; для (int i = 0; i <k-1; i ++) p2 = p2.next; while (p2.next! = null) {p2 = p2.next; p1 = p1.next; } return p1; } / *** Реализовать изменение связанного списка* @param. Узел pnode = Head; Узел pprev = null; while (pnode! = null) {node pnext = pnode.next; if (pnext == null) preversedhead = pnode; pnode.next = pprev; pprev = pnode; pnode = pNext; } this.Head = preversedhead; } / *** Выводить один связанный список из хвоста в голову рекурсивно* @param head* / public void printlistersely (node head) {if (head! = Null) {printlistreversely (head.next); System.out.print (Head.Data+""); }} / *** Запрос промежуточный узел одного связанного списка* Определите два указателя, по одному шагу за раз и два других шага за раз ...* @param head* @return q - это промежуточный узел* / public node searchmid (node head) {node q = head; Узел P = Head; while (p! = null && p.next! = null && p.next.next! = null) {q = q.next; p = p.next.next; } return q; } / *** Удалить указанный узел, не зная указателя головы* Хвостовой узел связанного списка не может быть удален, потому что следующий указатель его предшественника не может быть установлен на пустой после удаления* Другие узлы могут обмениваться значениями этого узла и его преемника, а затем удалить узлы преемника* @param n* @retur if (n == null || n.next == null) вернуть false; int tmp = n.data; N.Data = N.Next.Data; n.next.data = tmp; n.next = n.next.next; вернуть истину; } / *** Определите, пересекаются ли два связанных списка*, если пересекаются два связанных списка, должен быть один и тот же хвостовой узел, пройти два связанных списка, записать узлы хвоста и посмотреть, являются ли они одинаковыми* @param H1 Head Node в Linked List 1* @param H2 Head Node of Linked List 2* @retur if (h1 == null || h2 == null) вернуть false; Узел Tail1 = H1; while (tail1.next! = null) {tail1 = tail1.next; } Узел Tail2 = H2; while (tail2.next! = null) {tail2 = tail2.next; } return tail1 == tail2; } / ** * Найдите первый узел, который пересекает * @param h1 * @param h2 * @return * / public node getFirstMeetNode (Узел H1, узел H2) {if (h1 == null || h2 == null) return null; Узел Tail1 = H1; int len1 = 1; while (tail1.next! = null) {tail1 = tail1.next; Len1 ++; } Узел Tail2 = H2; int len2 = 1; while (tail2.next! = null) {tail2 = tail2.next; Len2 ++; } if (tail1! = tail2) {return null; } Узел T1 = H1; Узел T2 = H2; // Узнайте более длинный связанный список и пройдите 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; } вернуть T1; } public static void main (string [] args) {myLinkedList list = new MyLinkedList (); }}Выше всего содержание этой статьи. Я надеюсь, что содержание этой статьи поможет всем, кто учится или работа. Я также надеюсь поддержать Wulin.com больше!