Ява
Примеры основного анализа:
1. Одиночный список связанных списков
2. Список повторного списка с двойным списком
Среди них односвященный список списков и класс узлов с двойным списком и интерфейс Icomomoperate <t> соответствуют предыдущей статье и не будут обсуждаться здесь. Ссылка: Java Linked List Operations: Односвязанный список и списка с двумя связыванием //www.vevb.com/article/95113.htm
1. Одиночный список связанных списков
Package linklisttest; import java.util.hashmap; import java.util.map; открытый класс singlecyclelinklist реализует iCommoperate <snode> {private snode head = new Snode ("head"); // Общественный указатель заголовка, без изменений после объявления private int size = 0; public int getSize () {return this.size; } / * * Вставьте связанный список, каждый раз, когда он вставляется до конца, стандарт для определения того, является ли конечный конец следующим, указывающим на голову * * / @override public boolean insertnode (snode node) {boolean flag = false; initLinkList (); // Инициализировать связанный список if (this.size == 0) {// пустой связанный список this.head.setNextNode (node); node.setnextnode (this.head); } else {snode current = this.head; while (current.getnextnode ()! = this.head) {// найти конечный узел current = current.getNextNode (); } current.setNextNode (node); node.setnextnode (this.head); // Следуйте за плохим связанным списком, хвостовой узел указывает на голову} this.size ++; flag = true; вернуть флаг; } / * * Вставьте указанную позицию связанного списка, начиная с 1, а POS больше, чем размер, вставьте его в конце связанного списка * * / @override public boolean insertposnode (int pos, snode node) {boolean flag = true; Snode Current = this.head.getNextNode (); initLinkList (); // инициализировать связанный список if (this.Size == 0) {// Связанный список пуст this.head.setNextNode (node); node.setnextnode (this.head); // Следуйте за плохим связанным списком, хвостовой узел указывает, чтобы возглавить this.size ++; } else if (this.size <pos) {// Положение POS больше, чем длина связанного списка, вставьте End InSertNode (Node); } else if (pos> 0 && pos <= this.size) {// Узел в связанном списке // 1. Найдите узел и предыдущий узел, который должен быть вставлен, и узел будет вставлен между двумя узлами int int = 0; Snode prenode = this.head; // передний узел SNODE CurrentNode = current; // текущий узел while (найти <pos-1 && currentNode! = This.head) {prenode = current; // передний узел перемещается назад currentNode = currentNode.getNextNode (); // текущий узел перемещается назад на Find ++; if (find <pos-1 && currentNode! = this.head) {// Узел не закончен поиск узла, а узел перемещается назад current = current.getNextNode (); }} // System.out.println (prenode); // System.out.println (currentNode); // 2. Вставьте узел prenode.setnextnode (node); node.setnextnode (currentNode); this.size ++; } else {System.out.println ("Информация о позиции"); flag = false; } вернуть флаг; } private void initlinklist () {if (size == 0) {this.head.setNextNode (this.head); }} / * * Укажите узел POS связанного списка и удалите соответствующий узел. Метод: найдите передние и задние узлы для удаления, удаления, а индекс начинается с 1 * */ @override public boolean deleteNode (int pos) {boolean flag = false; Snode Current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {system.out.println ("Информация о позиции или нет информации в связанном списке"); } else {// 1. Найдите передние и задние узлы, чтобы удалить int find = 0; Snode prenode = this.head; // Front Node Snode nextNode = current.getNextNode (); // задний узел while (найти <pos-1 && nextnode! = This.head) {prenode = current; // передний узел перемещается обратно nextNode = nextNode.getNextNode (); // задний узел перемещается обратно находить ++; if (find <pos-1 && nextnode! = this.head) {// передний узел не закончен, задний «передний узел» перемещается назад turning = current.getNextNode (); }} // System.out.println (prenode); // System.out.println (nextNode); // 2. Удалить узел prenode.setNextNode (nextNode); System.gc (); // перерабатывать и удалить узел this.size--; flag = true; } вернуть флаг; } / * * Укажите узел POS в связанном списке, измените соответствующий узел, и подписка начинается с 1 * * / @Override public boolean updateNode (int pos, map <string, object> map) {boolean flag = false; Snode node = getNode (pos, map); // Получить узел на соответствующем POS if (node! = Null) {string data = (string) map.get ("data"); node.setdata (data); flag = true; } вернуть флаг; } / * * Найдите узл POS указанного связанного списка, а индекс начинается с 1 * * / @override public snode getNode (int pos, map <string> map) {snode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {System.out.println ("Информация о позиции неверна или связанный список не существует"); вернуть ноль; } int find = 0; while (find <pos-1 && current! = this.head) {current = current.getNextNode (); найти ++; } вернуть ток; } / * * Печать связанный список * * / @Override public void printlink () {int length = this.size; if (длина == 0) {System.out.println ("Связанный список пуст!"); возвращаться ; } Snode current = this.head.getNextNode (); System.out.println («Общее количество узлов:« + длина + »); int find = 0; while (current! = this.head) {System.out.println ("th" + (++ find) + "узлы:" + current); current = current.getNextNode (); }} public static void main (string [] args) {singlecyclelinklist scll = new singlecyclelinklist (); Snode node1 = new Snode ("node1"); SNODE NODE2 = новый SNODE ("NODE2"); Snode Node3 = новый Snode ("Node3"); Snode node4 = новый Snode ("node4"); Snode Node5 = новый Snode ("Node5"); Snode node6 = new Snode («Вставьте указанное положение»); // scll.insertposnode (scll.getSize ()+1, node1); // scll.insertposnode (scll.getsize ()+1, node2); // scll.insertposnode (scll.getsize ()+1, node2); scll.insertposnode (scll.getSize ()+1, node3); // scll.insertposnode (scll.getSize ()+1, node4); // scll.insertposnode (scll.getSize ()+1, node5); scll.insertnode (node1); scll.insertnode (node2); scll.insertnode (node3); scll.insertnode (node4); scll.insertnode (node5); System.out.println ("******************************* '); scll.printlink (); System.out.println ("************************** int pos = 2; System.out.println («Получить данные позиции«+pos+»связанного списка:«+scll.getNode (pos, null)); System.out.println ("******************************* '); int pos1 = 3; System.out.println («Вставить данные в узлы"+pos1+":"); scll.insertposnode (pos1, node6); scll.printlink (); System.out.println ("***************************** int pos2 = 3; System.out.println ("удалить"+pos2+"узлы:"); scll.deletenode (pos2); scll.printlink (); System.out.println ("********************************* int pos3 = 3; System.out.println ("Modify"+pos3+"узлы:"); Map <string, object> map = new hashmap <> (); map.put («data», «это тест»); scll.updatenode (pos3, map); scll.printlink (); }}2. Список повторного списка с двойным списком
Package linklisttest; import java.util.hashmap; import java.util.map; открытый класс DoubleCyclelinklist реализует iCommoperate <dnode> {private dnode head = new dnode ("head"); // Общественный указатель заголовка, без изменений после объявления private int size = 0; // Записать количество узлов связанного списка public int getSize () {return this.size; } / * * Вставьте связанный список, каждый раз, когда он вставляется до конца, стандарт для определения того, является ли конечный конец, указывающий на голову * * / @Override public boolean insertnode (dnode node) {boolean flag = false; initLinkList (); // Инициализировать связанный список dnode current = this.head; if (this.size == 0) {// пустой связанный список this.head.setnextnode (node); node.setpriornode (this.head); node.setnextnode (this.head); } else {// Узел в связанном списке while (current.getNextNode ()! = this.head) {// Найти конечный узел current = current.getNextNode (); } current.setNextNode (node); node.setpriornode (current); node.setnextnode (this.head); // перенаправить плохой связанный список, хвостовой узел указывает на голову} this.size ++; flag = true; вернуть флаг; } / * * Вставьте указанную позицию связанного списка, начиная с 1, а POS больше, чем размер, вставьте конец связанного списка * * / @@override public boolean insertposnode (int pos, dnode node) {boolean flag = true; initLinkList (); // Инициализировать связанный список dnode в настоящее время = this.head.getNextNode (); if (this.size == 0) {// Связанный список пуст this.head.setnextnode (node); node.setpriornode (this.head); node.setnextnode (this.head); this.size ++; } else if (pos> this.size) {// Положение POS больше, чем длина связанного списка, вставьте End InSertNode (Node); } else if (pos> 0 && pos <= this.size) {// Узел в связанном списке // 1. Найдите вставлен POS -узел, вставьте текущую позицию POS -узла int = 0; while (find <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode (); найти ++; } // 2. Вставьте узел if (current.getNextNode () == this.head) {// hail node.sed.setPriornode (current); node.setnextnode (this.head); current.setNextNode (узлы); } else if (current.getNextNode ()! = this.Head) {// Intermediate Node Node.setPriornode (current.getPriornode ()); node.setnextnode (current); current.getpriornode (). setNextNode (node); current.setpriornode (узел); } this.size ++; } else {System.out.println ("Информация о позиции"); flag = false; } вернуть флаг; } private void initlinklist () {if (size == 0) {this.head.setNextNode (this.head); this.head.setpriornode (this.head); }} / * * Укажите узел POS связанного списка и удалите соответствующий узел. Метод: найдите удаление переднего и заднего узла узла, которое будет удалено, и индекс начинается с 1 * */ @override public boolean deleteNode (int pos) {boolean flag = false; Dnode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {System.out.println ("Информация о позиции неверна или связанный список не существует"); } else {// 1. Найдите локацию Pos -узел, который должен быть удален int find = 0; while (find <pos-1 && current.getNextNode ()! = this.head) {current = current.getNextNode (); найти ++; } // 2. Удалить узел if (current.getNextNode () == this.head) {// tail node current.getpriornode (). SetNextNode (this.head); } else if (current.getNextNode ()! = this.Head) {// Intermediate Node Current.getPriornode (). setNextNode (current.getNextNode ()); current.getNextNode (). setPriOrnode (current.getPriornode ()); } System.gc (); // переработка и удалить узлы this.size--; flag = true; } вернуть флаг; } / * * Укажите узел POS в связанном списке, измените соответствующий узел, и подписка начинается с 1 * * / @Override public boolean updateNode (int pos, map <string, object> map) {boolean flag = false; Dnode node = getNode (pos, map); if (node! = null) {string data = (string) map.get ("data"); node.setdata (data); flag = true; } вернуть флаг; } / * * Найдите узел POS указанного связанного списка, а индекс начинается с 1 * * / @Override public dnode getNode (int pos, map <string, object> map) {dnode current = this.head.getNextNode (); if (pos <= 0 || pos> this.size || current == this.head) {System.out.println ("Информация о позиции неверна или связанный список не существует"); вернуть ноль; } int find = 0; while (find <pos-1 && current! = this.head) {current = current.getNextNode (); найти ++; } вернуть ток; } / * * Печать связанный список * * / @Override public void printlink () {int length = this.size; if (длина == 0) {System.out.println ("Связанный список пуст!"); возвращаться ; } Dnode current = this.head.getNextNode (); int find = 0; System.out.println («Общее количество узлов:« + длина + »); while (current! = this.head) {System.out.println ("th" + (++ find) + "One Nodes:" + current); current = current.getNextNode (); }} public static void main (string [] args) {doubleCycLelinklist dcll = new DoubleCyclelInklist (); Dnode node1 = new dnode ("node1"); Dnode node2 = new dnode ("node2"); Dnode node3 = new dnode ("node3"); Dnode node4 = new dnode ("node4"); Dnode node5 = new dnode ("node5"); Dnode node6 = new dnode ("вставьте указанное положение"); dcll.insertposnode (10, node1); dcll.insertposnode (10, node2); dcll.insertposnode (8, node3); dcll.insertposnode (88, node4); dcll.insertposnode (8, node5); // dcll.insertnode (node1); // dcll.insertnode (node2); // dcll.insertnode (node3); // dcll.insertnode (node4); // dcll.insertnode (node5); System.out.println ("***************************** dcll.printlink (); System.out.println("************************************"); int pos = 2; System.out.println («Получить данные"+pos+"данные позиции связанного списка:"+dcll.getnode (pos, null)); System.out.println ("***************************** int pos1 = dcll.getSize ()+1; System.out.println («Вставьте данные в«+pos1+»узлы:»); dcll.insertposnode (pos1, node6); dcll.printlink (); System.out.println ("*************************** int pos2 = 7; System.out.println ("удалить"+pos2+"узлы:"); dcll.deletenode (pos2); dcll.printlink (); System.out.println ("************************************* '); int pos3 = 3; System.out.println («изменить узлы«+pos3+»:»); Map <string, object> map = new hashmap <> (); map.put («data», «это тест»); dcll.updatenode (pos3, map); dcll.printlink (); }}Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!