Javaリンクリスト操作:回覧リンクリスト
主な分析の例:
1。シングルリンクリストの再発リスト
2。ダブルリンクリストの再発リスト
その中で、単一リンクリストノードとダブルリンクリストノードクラスとインターフェイスicommoperate <t>は、前の記事と一致しており、ここでは説明しません。参照:Javaリンクリスト操作:シングルリンクリストとダブルリンクリスト//www.vevb.com/article/95113.htm
1。シングルリンクリストの再発リスト
パッケージ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(); //リンクリストの初期化if(this.size == 0){//空のリンクリストthis.head.setNextNode(node); node.setNextNode(this.head); } else {snode current = this.head; while(current.getNextNode()!= this.head){// end node current = current.getNextNode(); } current.setNextNode(node); node.setNextNode(this.head); //悪いリンクされたリストに従って、テールノードはヘッドを指します} this.size ++; flag = true;フラグを返します。 } / * *リンクリストの指定された位置を1から挿入し、POSはサイズより大きく、リンクリストの最後に挿入 * snode current = this.head.getNextNode(); initlinkList(); //リンクリストの初期化if(this.size == 0){//リンクリストは空です。 node.setNextNode(this.head); //悪いリンクされたリストに従って、テールノードがポイントしてthis.size ++; } else if(this.size <pos){// pos位置はリンクリストの長さよりも大きく、end insertnode(node)を挿入します。 } else if(pos> 0 && pos <= this.size){//リンクリストのノード// 1。挿入するノードと前のノードを検索すると、2つのノードの間にノードが挿入されます。 Snode Prenode = this.head; //フロントノードスノードcurrentNode = current; //現在のノードwhile(<pos-1 && currentNode!= this.head){prenode = current; //フロントノードは後方に移動しますcurrentNode = currentNode.getNextNode(); //現在のノードが後方に移動されます++; if(find <pos-1 && currentNode!= this.head){//ノードはノードを探して終了し、ノードは後方current = current.getNextNode(); }} // System.out.println(prenode); // System.out.println(currentNode); //2。NodePrenode.setNextNode(ノード)を挿入します。 node.setNextNode(currentNode); this.size ++; } else {system.out.println( "Position Information error"); flag = false; } flagを返します。 } 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 int = 0;を削除します。 Snode Prenode = this.head; //フロントノードスノードNextNode = current.getNextNode(); //バックノードwhile(<pos-1 && nextnode!= this.head){prenode = current; //フロントノードが[NextNode = nextNode.getNextNode(); //バックノードが移動されますfind ++; if(find <pos-1 && nextnode!= this.head){//フロントノードが終了していない場合、背面「フロントノード」が移動しますcurrent = current.getNextNode(); }} // System.out.println(prenode); // System.out.println(nextnode); //2。NodePrenode.SetNextNode(NextNode)を削除します。 System.gc(); //ノードをリサイクルして削除するthis.size-; flag = true; } flagを返します。 } / * *リンクリストのノード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; } flagを返します。 } / * *指定されたリンクリストのノードPOSを見つけ、添え字は1 * * / @Override public Snode getNode(int pos、map <string、object> map){snode current = this.head.getnextnode()から始まります。 if(pos <= 0 || pos> this.size || current == this.head){system.out.println( "位置情報が正しくないか、リンクリストが存在しない"); nullを返します。 } int find = 0; while(find <pos-1 && current!= this.head){current = current.getNextNode(); ++を見つけます; } return current; } / * *リンクリストを印刷 * * / @Override public void printlink(){int length = this.size; if(length == 0){system.out.println( "リンクリストは空です!");戻る ; } snode current = this.head.getNextNode(); system.out.println( "ノードの総数:" + length + "one"); int find = 0; while(current!= this.head){system.out.println( "th" ++(++ find) + "nodes:" + current); current = current.getNextNode(); }} public static void main(string [] args){singlecyclelinklist scll = new singlecyclelinklist(); snode node1 = new Snode( "node1"); snode node2 = new Snode( "node2"); snode node3 = new Snode( "node3"); snode node4 = new Snode( "node4"); snode node5 = new 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+"nodes:"); scll.insertposnode(pos1、node6); scll.printlink(); System.out.println("***************************Delete the node specified in the linked list**********************************"); int pos2 = 3; System.out.println( "delete"+pos2+"nodes:"); scll.deletenode(pos2); scll.printlink(); System.out.println( "*******************************リンクされたリストの指定された位置ノードを変更********************************************************); int pos3 = 3; System.out.println( "Modify"+pos3+"nodes:"); map <string、object> map = new Hashmap <>(); map.put( "data"、 "これはテストです"); scll.updatenode(pos3、map); scll.printlink(); }}2。ダブルリンクリストの再発リスト
パッケージlinklisttest; import java.util.hashmap; import java.util.map; public class doublecyclelinklistはicommoperate <dnode> {private dnode head = new dnode( "head"); //公開ヘッダーポインター、宣言後に変更されていないプライベートint size = 0; //リンクリストのノードの数を記録しますpublic int getSize(){return this.size; } / * *リンクリストを挿入するたびに、端に挿入されるたびに、端が次にヘッドを指しているかどうかを判断する標準 * 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){// end node current = current.getNextNode(); } current.setNextNode(node); node.setPriorNode(current); node.setNextNode(this.head); //悪いリンクリストをリダイレクトすると、テールノードがヘッドを指します} this.size ++; flag = true;フラグを返します。 } / * * 1から始まるリンクリストの指定された位置を挿入し、POSはサイズより大きくなり、リンクリストの端を挿入 * 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(node)を挿入します。 } else if(pos> 0 && pos <= this.size){//リンクリストのノード// while(find <pos-1 && current.getNextNode()!= this.head){current = current.getNextNode(); ++を見つけます; } // 2。node if(current.getNextNode()== this.head){// tael node node.setpriorNode(current); node.setNextNode(this.head); current.setNextNode(node); } else if(current.getNextNode()!= this.head){//中間ノードnode.setPriorNode(current.getPriorNode()); node.setNextNode(current); current.getPriorNode()。setNextNode(node); current.setPriorNode(ノード); } this.size ++; } else {system.out.println( "Position Information error"); flag = false; } flagを返します。 } 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 int = 0; while(find <pos-1 && current.getNextNode()!= this.head){current = current.getNextNode(); ++を見つけます; } // 2。node delete node if(current.getNextNode()== this.head){// tail node current.getPriorNode()。setNextNode(this.head); } else if(current.getNextNode()!= this.head){//中間ノードcurrent.getPriorNode()。setNextNode(current.getNextNode()); current.getNextNode()。setPriorNode(current.getPriorNode()); } system.gc(); //ノードをリサイクルして削除するthis.size-; flag = true; } flagを返します。 } / * *リンクリストのノード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; } flagを返します。 } / * *指定されたリンクリストのノード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( "位置情報が正しくないか、リンクリストが存在しない"); nullを返します。 } int find = 0; while(find <pos-1 && current!= this.head){current = current.getNextNode(); ++を見つけます; } return current; } / * *リンクリストを印刷 * * / @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( "ノードの総数:" + length + "one"); while(current!= this.head){system.out.println( "th" ++(++ find) + "1つのノード:" + 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+"nodes:"); dcll.insertposnode(pos1、node6); dcll.printlink(); System.out.println("************************Delete the node specified location of the linked list**********************************"); int pos2 = 7; System.out.println( "delete"+pos2+"nodes:"); DCLL.DELETENODE(POS2); dcll.printlink(); System.out.println("***************************************"); int pos3 = 3; system.out.println( ""+pos3+"nodes:"); map <string、object> map = new Hashmap <>(); map.put( "data"、 "これはテストです"); dcll.updatenode(pos3、map); dcll.printlink(); }}読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!