Java 링크 된 목록 작동 : 원형 링크 목록
주요 분석 예 :
1. 단일 링크 목록 반복 목록
2. 이중 연결 목록 재발 목록
그중에서도 단일 연결 목록 노드 및 이중 연결 목록 노드 클래스 및 인터페이스 ICommoperate <T>는 이전 기사와 일치하며 여기에서 논의되지 않습니다. 참조 : Java Linked List Operations : 단일 링크 목록 및 이중 문자 목록 //www.vevb.com/article/95113.htm
1. 단일 링크 목록 반복 목록
package linklisttest; import java.util.hashmap; import java.util.map; public class singlecyclelinklist는 icommoperate <snode> {private snode head = new snode ( "head"); // 공개 헤더 포인터, 선언 후 변경되지 않은 개인 int size = 0; public int getsize () {return this.size; } / * * 링크 된 목록을 끝까지 삽입 할 때마다 끝이 헤드를 가리키는지 여부를 결정하기위한 표준 * / @override public boolean insertNode (snode node) {boolean flag = false; initLinkList (); // 링크 된 목록을 초기화합니다. node.setnextNode (this.head); } else {snode current = this.head; while (current.getNextNode ()! = this.head) {// 끝 노드를 찾습니다. current = current.getNextNode (); } current.setNextNode (노드); 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 (); // 링크 된 목록을 초기화하면 (this.size == 0) {// 링크 된 목록이 비어 있습니다. node.setnextNode (this.head); // 잘못된 링크 된 목록을 따르십시오. 꼬리 노드는 this.size ++; } else if (this.size <pos) {// POS 위치는 링크 된 목록의 길이보다 큽니다. 엔드 insertNode (노드)를 삽입합니다. } else if (pos> 0 && pos <= this.size) {// 링크 된 목록의 노드 // 1. 삽입 할 노드와 이전 노드를 찾으면 두 노드 int find = 0 사이에 노드가 삽입됩니다. snode prenode = this.head; // 프론트 노드 스 네드 currentNode = current; // 현재 노드 while (find <pos-1 && currentNode! = this.head) {prenode = current; // 전면 노드는 뒤로 이동합니다 currentNode = currentNode.getNextNode (); // 현재 노드가 뒤로 이동합니다. 찾기 ++; if (find <pos-1 && currentNode! = this.head) {// 노드가 끝나지 않고 노드를 찾는 것이 끝나지 않고 노드가 뒤로 이동합니다. }} // system.out.println (prenode); // system.out.println (currentNode); // 2. 노드 prenode.setnextNode (노드) 삽입; node.setNextNode (currentNode); this.size ++; } else {system.out.println ( "위치 정보 오류"); flag = false; } 반환 플래그; } private void initLinkList () {if (size == 0) {this.head.setNextNode (this.head); }} / * * 링크 된 목록의 노드 PO를 지정하고 해당 노드를 삭제합니다. 방법 : 전면 및 후면 노드를 찾아 삭제하고 삭제하고 위시가 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; // 프론트 노드 스 네드 NextNode = current.getNextNode (); // 뒤쪽 노드 while (찾기 <pos-1 && nextnode! = this.head) {prenode = current; // 프론트 노드가 다시 이동합니다. nextNode = nextNode.getNextNode (); // 뒤쪽 노드가 뒤로 이동합니다. 찾기 ++; if (find <pos-1 && nextnode! = this.head) {// 전면 노드가 완료되지 않았으며 뒤쪽 "전면 노드"가 뒤로 이동합니다. }} // system.out.println (prenode); // system.out.println (NextNode); // 2. 노드 prenode.setNextNode (NextNode)를 삭제합니다. System.gc (); // 노드를 재활용하고 삭제하십시오 .Size-; flag = true; } 반환 플래그; } / * * 링크 된 목록의 노드 POS를 지정하고 해당 노드를 수정하며 첨자는 1 * * / @override public boolean updatenode (int pos, map <string, object> map)에서 시작합니다. {boolean flag = false; 노드 노드 = getNode (POS, MAP); // 해당 POS에서 노드를 가져옵니다. if (node! = null) {String data = (string) map.get ( "data"); node.setData (데이터); flag = true; } 반환 플래그; } / * * 지정된 링크 된 목록의 노드 PO를 찾으면 위시는 1 * * / @override public snode getNode (int pos, map <string, object> map)에서 시작합니다. 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 (length == 0) {System.out.println ( "링크 된 목록은 비어 있습니다!"); 반품 ; } snode current = this.head.getNextNode (); System.out.println ( "총 노드 수 :" + 길이 + "ones"); 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 (); 노드 노드 1 = 새로운 스 네드 ( "node1"); Snode node2 = 새로운 스 니드 ( "Node2"); 노드 노드 3 = 새로운 스 네드 ( "Node3"); 노드 Node4 = 새로운 스 네드 ( "Node4"); 노드 Node5 = 새로운 스 네드 ( "Node5"); snode node6 = new snode ( "지정된 위치 삽입"); // scll.insertposnode (scll.getsize ()+1, node1); // scll.insertposnode (scll.getsize ()+1, node2); // scll.insertposnode (scll.insertsposnode ()+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("************************ Get the specified linked list node*************************************"); 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 ( "수정"+pos3+"노드 :"); map <string, object> map = new Hashmap <> (); map.put ( "데이터", "이것은 테스트입니다"); scll.updatenode (pos3, map); scll.printlink (); }}2. 이중 연결 목록 재발 목록
패키지 linklisttest; import java.util.hashmap; import java.util.map; public class doublecyclelinklist implemes icommoperate <dnode> {private dnode head = new dnode ( "head"); // 공개 헤더 포인터, 선언 후 변경되지 않은 개인 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.setPriorNode (this.head); node.setnextNode (this.head); } else {// 링크 된 목록의 노드 while } current.setNextNode (노드); node.setPriorNode (현재); node.setnextNode (this.head); // 잘못된 링크 된 목록을 리디렉션하고 꼬리 노드가 헤드를 가리 킵니다.} 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) {// 링크 된 목록이 비어 있습니다. node.setPriorNode (this.head); node.setnextNode (this.head); this.size ++; } else if (pos> this.size) {// POS 위치는 링크 된 목록의 길이보다 큽니다. end insertNode (노드)를 삽입합니다. } else if (pos> 0 && pos <= this.size) {// 링크 된 목록의 노드 // 1. 삽입 할 POS 노드를 찾으십시오. POS 노드 전류 위치 int find = 0; while (find <pos-1 && current.getnextNode ()! = this.head) {current = current.getNextNode (); 찾기 ++; } // 2. if (current.getNextNode () == this.head) {// Tail Node Node.setPriorNode (현재); node.setnextNode (this.head); current.setNextNode (노드); } else if (current.getNextNode ()! = this.head) {// 중간 노드 노드 .setPriorNode (current.getPriorNode ()); node.setnextNode (현재); current.getPriorNode (). setNextNode (노드); 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); }} / * * 링크 된 목록의 노드 PO를 지정하고 해당 노드를 삭제합니다. 방법 : 삭제할 노드의 전면 및 후면 노드 삭제를 찾으십시오. 첨자는 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) {// 중간 노드 전류 .getPriorNode (). setNextNode (current.getNextNode ()); current.getNextNode (). setPriorNode (current.getPriorNode ()); } system.gc (); // 노드를 재활용하고 삭제하십시오 .Size-; flag = true; } 반환 플래그; } / * * 링크 된 목록의 노드 POS를 지정하고 해당 노드를 수정하며 첨자는 1 * * / @override public boolean updatenode (int pos, map <string, object> map)에서 시작합니다. {boolean flag = false; dnode 노드 = getNode (pos, map); if (node! = null) {문자열 data = (string) map.get ( "data"); node.setData (데이터); 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 (length == 0) {System.out.println ( "링크 된 목록은 비어 있습니다!"); 반품 ; } dnode current = this.head.getNextNode (); int find = 0; System.out.println ( "총 노드 수 :" + 길이 + "ones"); while (current! = this.head) {system.out.println ( "th" + (++ find) + "하나의 노드 :" + 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("****************************** Output linked list*******************************"); 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 ( "데이터", "이것은 테스트입니다"); dcll.updatenode (pos3, map); dcll.printlink (); }}읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!