二重リンクリストの要素を追加および削除します

/ ** 
 * @author Eightn0 
 * @create 2021-03-13 20:36 
 *二重リンクリスト:1つのフィールドはデータを格納し、2つのフィールドはポインターを格納し、1つのポインターは次のノードを指し、もう1つのポインターは前のノードを指します。
 * llink- data-rlink 
 *挿入:最初の位置に挿入:新しいノードの右リンクを元のテーブルの最初のノードにポイントし、左リンクをnullにポイントします
 *
 元のノードの最初のノードの左リンクをポイントしますテーブルを新しいノードに変更します*元のテーブルを変更しますヘッドポインタのヘッドが新しいノードを指します
 *最後の位置に挿入します:元のテーブルの最後のノードの右リンクが新しいノードを指します
 *新しいノードの左リンク元のテーブルの最後のノードを指し、右側のリンク
 は中央の位置でnull *を指します挿入:新しいノードの左側はptrであり、これもrtr 
 * ptrであることに注意してください。右側のリンクは新しいノードを指します
 *新しいノードの左リンクはptrを指し、右リンクはrtrを指します
 * rtr左リンクは新しいノードを指します
 *削除:最初のノードを削除します:ヘッダーポインターヘッドは次を
 指します*新しいテーブルヘッドポインターはnullを指します
 *最後のノードを削除します:最後から2番目のノードの右ポインターがnullを指します
 *中央のノードを削除します:前のノードの右リンクが次のノードを指します
 *次のノードの左側のリンクは前のノードを指します
 * / 

class Node { 
    int data; 
    Node rnext; 
    Node lnext; 

    public Node(int data){ 
        this.data = data; 
        this.rnext = null; //すべてのノードには左ポインタと右ポインタ。デフォルトはnullで、これを割り当てます
        。lnext= null; 
    } 
} 
public class Doubly { 
    private Node first; 
    private Node last; 

    public boolean isEmpty(){ 
        return first == null; 
    } 

    public void print (){
        ノードcurrent = first; 
        while(current!= null){ 
            System.out.println( "[" + current.data + "]"); 
            current = current.rnext;
        } 
        System.out.println();
                    last.rnext = newN; //テーブルの終わり右のリンクは新しいノードを指しています 
    }

    / *ノードを挿入* / 
    public void insert(Node newN){ 
        Node tmp; 
        Node newNode; 
        if(isEmpty()){ 
            first = newN; 
            first.rnext = last; 
            last = newN; 
            last.lnext = first; 
        } else { 
            if(newN.lnext == null){//ヘッダーを
                最初に挿入します。lnext= newN; //元のヘッダーの左側のリンクが新しいノードを
                指しますnewN.rnext = first; //新しいノードの右側のポインタ
                最初に元のヘッダーを指す= newN; //テーブルの先頭が新しいポインタに移動し、順序を乱すことはできません
            } else { 
                if(newN.rnext == null){//テーブルの終わりを挿入します
                    newN .lnext = last; //新しいノードの左側のリンクは元のテーブルの終わりを指します
                    last = newN; //新しいテーブルの終わりは新しいノードを指します
                )else {//中央の
                    newNode = first; 
                    tmp = first; 
                    while(newN.rnext!= newNode.rnext)を挿入します{ 
                        tmp = newNode; 
                        newNode = newNode .rnext; //検索プロセス
                    } 
                    tmp.rnext = newN; //挿入プロセス
                    newN.rnext = newNode; 
                    newNode.lnext = newN; 
                    newN.lnext = tmp; 
                } 
            } 
        } 
    } 

    / *ノードの削除* / 
    public void delete(Node delNode){ 
        Node newNode;
        Node tmp;
            newNode = first; 
        if(first == null){ //リンクリストが空かどうかを判断します
            System.out.println( "[テーブルが空です]"); 
            return; 
        } 
        if(delNode == null){//削除条件が存在するかどうかの判断
            System.out.println( "[エラー:delはノードではありませんin the table] "); 
            return; 
        } 
        if(first.data == delNode.data){//ヘッダーを
            最初に削除= first.rnext; // 2番目のノードへの移動を開始
            first.lnext = null; //移動2番目の各ノードの左側のリンクはnullに設定されます
        } else if(last.data == delNode.data){//テーブルの終わりを削除します
            newNode = first; 
            while(newNode.rnext!= last)newNode = newNode .rnext; 
            newNode.rnext = null; 
            last = newNode; 
        } else {//テーブルの中央にあるノードを削除します
            tmp = first; 
            while(newNode.data!= delNode.data){ 
                tmp = newNode; //検索プロセス
                newNode = newNode.rnext; 
            } 
            tmp.rnext = delNode.rnext; //削除プロセス
            tmp.lnext = delNode.lnext ; 
        } 
    } 
}

おすすめ

転載: blog.csdn.net/vivian233/article/details/114764841