Эта статья разделяет соответствующий код для Java для реализации односвященных списков и двусторонних связанных списков для вашей ссылки. Конкретный контент заключается в следующем
Java реализует единственный связанный список:
Код пакета; класс Node {Node Next; Int Data; public node (int data) {this.data = data; }} класс Linklist {node First; // главный public linklist () {this.first = null; } public void AddNode (Node no) {№ next = First; First = no; // добавить в голову} public void delectNode () {node n = first.next; первый = null; first = n; // удалить в голове} // удалить указанное положение public int number () {int count = 1; // Посмотрите, сколько элементов существует узлы nd = первое; while (nd.next! = null) {nd = nd.next; count ++; } return Count; } public void delectExact (int n) {// удалить указанную позицию, если (n> 1) {int count = 1; Узел de = первое; while (count <n-1) {de = de.next; count ++; } de.next = de.next.next; } else First = First.Next; } public void addExact (int n, node nd) {if (n> 1) // Добавить указанную позицию {int count = 1; Узел de = первое; while (count <n-1) {de = de.next; count ++; } nd.next = de.next; de.next = nd; } else First = First.Next; } public int findnode (int n) {int count = 1; // Найти позицию, соответствующую числу узлу de = first; while (de.data! = n) {de = de.next; count ++; if (de == null) {return -1; }} return count; } public void print () {node no = first; // print all while (no! = null) {System.out.println (№ DATA); Нет = № нексте; } / ll.addnode (новый узел (12)); ll.addnode (новый узел (15)); ll.addnode (новый узел (18)); ll.addnode (новый узел (19)); ll.addnode (новый узел (20)); /*System.out.println(ll.first.data); ll.delectnode (); System.out.println (ll.first.data);*/ system.out.println (ll.number ()); LL.DelectExact (3); LL.Addexact (3, новый узел (100)); System.out.println (ll.number ()); // ll.print (); System.out.println (ll.findnode (112)); }}Java реализует двусторонний список связанного списка:
открытый класс DoubleLink {public static void main (string [] args) {node2 no = new Node2 (5); № Аддлфт (новый узл2 (6)); № Addright (новый узл2 (7)); /*no.print (); № pprint2 ();*/ № addexact2 (1, new Node2 (8)); № pprint (); System.out.println ("-------------------"); № print2 (); }} класс Node2 {public node2 First; Public Node2 End; Общественный узел 2 остался; Public Node2 Правильно; int data = 0; public node2 (int n) {First = this; end = это; first.data = n; } // Добавить публичную void из головы addLeft (node2 до) {first.left = до; До.right = First; первый = до; } // Добавить публичную void из хвоста addright (node2 после) {end.right = после; After.left = end; end = после; } // Вставить количество публичного void AddExact (int n, node2 no) {int count = 0; if (n == 0) {addleft (no); } else {node2 f = First; while (true) {f = f.right; count ++; if (count == n) {// Это изменение в указании четырех указателей № Left = f.left; f.left.right = нет; // first.left = нет; № Right = F; f.left = нет; перерыв; }}}}} // Вставить количество публичного void AddExAct2 (int n, node2 no) {int count = 0; if (n == 0) {addright (no); } else {node2 f = end; while (true) {f = f.left; count ++; if (count == n) {no.left = f; Нет. f.right.left = нет; f.right = нет; перерыв; }}}}} // положительный обход public void print () {system.out.println (first.data); while (first.right! = null) {System.out.println (first.right.data); First = First.right; } // System.out.println (end.data); } // Обратный порядок обход public void print2 () {System.out.println (end.data); while (end.left! = null) {System.out.println (end.left.data); end = end.left; }}}/*Стоит отметить, что каждый раз, когда вставлен новый объект, вам необходимо обратить внимание на изменение указателя. Во -первых, указание обеих сторон этого нового объекта (слева и справа), за которым следует указание левого объекта вправо и указание правого объекта влево. Указание этих четырех указателей должно быть правильным, в противном случае это может привести к невозможности реализации положительного или обратного порядка. *//*Сравнение отдельных связанных списков, отдельные связанные списки можно переселить только из одного направления, потому что есть только одна голова, в то время как связанный список связанных списков имеет голову и хвост. Его можно пройти с * головы или с хвоста. Более того, поскольку один из объектов имеет указатели в двух направлениях, он может получить объект * слева и объект справа. * Но для односвязанных списков, потому что есть только одно направление, они могут идти только влево или вправо. При добавлении объектов вы также можете добавить их с самого начала или с конца. * Если один связанный список должен добавить два направления, он редко или нет, потому что он имеет только указатели на одно направление влево или вправо*, в то время как каждый объект двунаправленного списка связана имеет указатели на два направления, что не является более гибким, но у него также есть недостатки, поскольку в этом смысле каждый объект* будет содержать два указателя, которые также будут потреблять больше памяти. * * */Выше приведено все об этой статье, я надеюсь, что для всех будет полезно изучать программирование Java.