package com.algorithm.tiger.linkedlist; / ** *リンクリスト(接続された多くのノードで構成) * * @description:単一リンクリスト * @author:tiger * @create:2020-07-11 11:05 * / public class MyLinkedList { // リンクリストの 先頭にあるプライベートノードの先頭; //リンクリストの 末尾にあるプライベートノードの末尾; //リンクリストの実際のサイズprivateint size; public Node find(int index){ //異常状態を予測 if(index <0 | | index> size){ throw new IndexOutOfBoundsException( "Out of the range of the linked list node!"); } if(size == 0){ //空のリンクリスト return null; } else if(index == 0){ //ヘッド return head; } else if(size == index){ //テール リターンテール; } else { //中央(ヘッドからインデックスのノードノードに到達するまでトラバース) Node targetNode = head; for(int i = 0; i <index; i ++){ targetNode = targetNode.next; } return targetNode; } } / ** *要素の挿入(ヘッド挿入、ミドル挿入、テール挿入) * * @param data * @param index * @return * / publicノードinsert(int data、int index){ //異常な状態を予測する if(index <0 || index> size){ throw new IndexOutOfBoundsException( "リンクリストノードの範囲外です!"); } //挿入されたノード ノードinsertNode = new Node(data); if(size == 0){ //空のリンクリスト head = insertNode; tail = insertNode; } else if(index == 0){ //ヘッド挿入 // 1。新しいノードの次のポインタを元のヘッドノードに ポイントしますinsertNode.next = head; // 2。新しいノードを次のように変換しますリンクリストのヘッドノード head = insertNode; } else if(size == index){ //テールを挿入 // 1。元のテールノードの次のノードを新しいノードに新しいノードを tail = insertNode; } else { tail.next = insertNode; // 2.新しいノードをテールノードにポイントします * //中間挿入(リンクリストの検索メソッドに依存) ノードprevNode = find(index-1); ノードcurrentNode = prevNode.next; prevNode.next = insertNode; insertNode.next = currentNode; //元から更新front //ノードprevNode = find(index-1); // // 1.新しいノードの次のポインタ。挿入位置のノードを指します(1と2を逆にすることはできません) // insertNode.next = prevNode.next; // // 2。挿入位置にある前のノードの次のポインタ 。新しいノードを指します//prevNode.next = insertNode; } size ++; //挿入された新しいノードデータを 返しますreturninsertNode; } / ** *要素を削除し、削除されたノードを返します * @ param index * @return * / public Node remove(int index){ //異常状態の事前判断 if(index <0 || index> size){ throw new IndexOutOfBoundsException( "リンクリストノードの範囲外です!"); } ノードremoveNode = null; if(size == 0){ //空のリンクリスト } else if(index == 0){ //ヘッドを 削除removeNode = head; head = head.next; } else if(size == index ){ //テール ノードを削除prevNode = find(index-1); removeNode = prevNode.next; prevNode.next = null; //途中で削除(リンクリスト検索方法に依存) tail = prevNode; } else { ノードprevNode = find(index-1); ノードnextNode = prevNode.next.next; removeNode = prevNode.next; prevNode.next = nextNode; } サイズ-; removeNodeを返します。 } public Node getHead(){ ヘッドを返す; } public void setHead(Node head){ this.head = head; } public Node getTail(){ テールを返す; } public void setTail(Node tail){ this.tail = tail; } public int getSize(){ サイズを返す; } public void setSize(int size){ this.size = size; } @Override public String toString(){ return "MyNode {" + "head =" + head + "、tail =" + tail + "、size =" + size + '}'; } / *** ノード内部クラス * / private static class Node { //現在のノードデータ privateint data; //次のノードprivateNode next; public Node(){ } public Node(int data){ this.data = data; } } public int getData(){ データを返します。 * / public void setData(int data){ this.data = data; } public Node getNext(){ return next; } public void setNext(Node next){ this.next = next; } @Override public String toString(){ return "Node {" + "data =" + data + "、next =" + next + '}'; } } / ** * T试 * * @param args public static void main(String [] args){ ノードノード=新しいノード(12); MyLinkedListlinkedList = new MyLinkedList(); linkedList.insert(12、0); linkedList.insert(122、0); linkedList.insert(343、0); linkedList.insert(1243、1); linkedList.insert(444444、1); linkedList.insert(45678、1); linkedList.insert(333333、1); System.out.println(linkedList); System.out.println( "==================="); // System.out.println(linkedList.find(2)); //linkedList.remove(0); //linkedList.remove(0); System.out.println( "==================="); linkedList.remove(3); System.out.println(linkedList); // LinkedListlinkedList1 = new LinkedList(); } }
単一リンクリストと単純なコードのアイデアを実現する
おすすめ
転載: blog.csdn.net/qq_36336332/article/details/107292032
おすすめ
ランキング