/ ** * @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
おすすめ
ランキング