メインコンテンツ:
コードをアップロードするだけで、それは非常に抑制されていない~~~です
パッケージPERS.TY. $ 1101DATASTRUCTURE; IMPORT JAVA.UTIL.HASHTABLE;/*** @Author Administrator*単一のリンクリストの基本操作を実装し、削除ノードの追加、ソート、印刷、計算*/パブリッククラスMyLinkedList {node head = null ;/ data*/ public void addNode(int d){node newNode = new Node(d); if(head == null){head = newNode;戻る; } node tmp = head; while(tmp.next!= null){tmp = tmp.next; } // tmp.next = newNodeを終了するためにノードを追加します。 }/*** @param index:delete index node* @returnは真の返品を正常に返し、故障した場合にfalseを返します*/public boolean deleteNode(int index){if(index <1 || index> length()){return false; //要素の位置を削除不合理} trueを返します。 } int i = 1; Node Prenode = head;ノードcurnode = prenode.next; while(curnode!= null){if(i == index){prenode.next = curnode.next; trueを返します。 } prenode = curnode; curnode = curnode.next; i ++; } trueを返します。 } / ** * @returnリンクリストの長さの長さを返します * / public int length(){int length = 0;ノードtmp = head; while(tmp!= null){length ++; tmp = tmp.next; } return length; } / ***リンクリストをソート* @returnソートされたヘッダーノードを返します* / public node orderlist(){node nextnode = null; int temp = 0;ノードcurnode = head; while(cunode.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> table = new hashtable <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; }} / ***リンクリストから複製データを削除する2番目の方法*ダブルループトラバーサル*利点と短所は明らかです* / public void deleteduplecate2(){node p = head; while(p!= null){node 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-thを見つけます* @return this node* 2つのポインターP1とP2を設定して、P2 KをP1よりも速くし、同時に後方に移動します。 p2が空の場合、p1は最後のノード*/ publicノードfindelem(ノードヘッド、int k)までk-theです。{if(k <1 || k> this.length())return null;ノードP1 = head;ノードP2 = head; for(int i = 0; i <k-1; i ++)p2 = p2.next; while(p2.next!= null){p2 = p2.next; p1 = p1.next; } p1を返します。 } / ***リンクリストの逆転を実装* @paramヘッドリンクリストのヘッドノード* / public void rubtertelice(ノードヘッド){node preverseded = head;ノード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 printlistReversely(node head){if(head!= null){printListreversely(head.next); System.out.print(head.data+""); }} / ***単一のリンクリストの中間ノードをクエリします*一度に1つのステップ、他の2つのステップを一度に1つのステップに定義します...* @param head* @return qは中間ノード* / publicノード検索mid(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; } / ***ヘッドポインターを知らずに指定されたノードを削除します*リンクリストのテールノードは削除できません。削除後に前身節の次のポインターを空にすることができないため*他のノードの値と後継ノードの値を交換できます。 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; trueを返します。 } / *** 2つのリンクされたリストが交差するかどうかを判断します* 2つのリンクリストが交差する場合、同じテールノードが必要な場合、2つのリンクリストをトラバースし、テールノードを記録し、同じものであるかどうかを確認し、リンクされたリスト1* @param H2ヘッドノードのリンクh2ヘッドノード2* h2){if(h1 == null || h2 == null)falseを返す;ノードTail1 = H1; while(tail1.next!= null){tail1 = tail1.next; } node tail2 = h2; while(tail2.next!= null){tail2 = tail2.next; } tail1 == tail2を返します。 } / ** *交差する最初のノードを見つけます * @param h1 * @return * / public node getFirstMeetNode(node H1、node H2){if(h1 == null || h2 == null)return null;ノードTail1 = H1; int len1 = 1; while(tail1.next!= null){tail1 = tail1.next; LEN1 ++; } node 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をもっとサポートしたいと思っています!