単一リンクリストと単純なコードのアイデアを実現する

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
おすすめ