二重リンク リスト 二重リンク リストとも呼ばれ、リンク リストの一種であり、その各データ ノードには 2 つのポインタがあり、それぞれ直接後続ノードと直接先行ノードを指します。したがって、二重リンク リストの任意のノードから開始して、その 先行ノード および 後続ノード
に簡単にアクセスできます。次の図は双方向です。 論理構造リンク リストの図は、二重リンク リストの各ノードに 2 つのノードとデータ フィールドへのポインタ参照が含まれているという点で、単一リンク リストとは異なります。これら 2 つのノードは、それぞれ前のノードと次のノードを指します。
この二重リンクリストの構造は、単一リンクリストに比べて改善されており、前後のノードを参照することにより、リンクリスト全体を与えられた値で前方または後方に走査することができ、走査効率が大幅に向上します。クエリは、単一リンク リストのパフォーマンスの問題をある程度解決しますが、同時にリンク リストのストレージ オーバーヘッドも増加します。おなじみの linkedList の最下層は、この原理によって実装されています。
public class DoubleLinkTest<T> { /** * 内部构造节点类 * * @param <T> */ private class Node<T> { private T data; private Node next; // 指向下一个节点的引用 private Node prev; // 指向前一个节点的引用 public Node(T data) { this.data = data; } } private Node<T> head; // 模拟头结点 private Node<T> last; // 模拟尾部节点 private Node<T> other; // 暂定一个临时节点,用作指针节点 private int length; public void DoubleLinkTest() { head = new Node<T>(null); last = head; length = 0; } public void DoubleLinkTest(T data) { head = new Node<T>(data); last = head; length = 0; } /** * 链表是否为空 * * @return */ public boolean isEmpty() { return length == 0; } /** * 普通添加,往链表尾部添加 * * @param data */ public void add(T data) { if (isEmpty()) { // 链表为空,新创建一个链表 head = new Node<T>(data); last = head; length++; } else { other = new Node<T>(data); other.prev = last; last.next = other; // 将新的节点与原来的尾部节点进行结构上的关联 last = other; // other将成为最后一个节点 length++; } } /** * 在指定的数据后面添加数据 * * @param data * @param insertData */ public void addAfter(T data, T insertData) { other = head; while (other != null) { // 我们假定这个head是不为空的。 if (other.data.equals(data)) { Node<T> t = new Node<T>(insertData); t.prev = other; t.next = other.next;// 对新插入的数据进行一个指向的定义 other.next = t; if (t.next == null) { last = t; } length++; } other = other.next; } } /** * 删除,删除指定的数据 * * @param data */ public void remove(T data) { other = head;// 我们假定这个head是不为空的。 while (other != null) { if (other.data.equals(data)) { other.prev.next = other.next; length--; } other = other.next; } } /** * 测试打印数据 */ public void printList() { other = head; for (int i = 0; i < length; i++) { System.out.println(other.data + " "); other = other.next; } } public static void main(String[] args) { DoubleLinkTest<Integer> link = new DoubleLinkTest<Integer>(); link.add(1); link.add(2); link.add(3); link.add(5); link.add(6); link.add(7); link.printList(); System.out.println(" ============== "); System.out.println(" ==== 在3后面添加一个数据开始========== "); link.addAfter(3, 99); link.printList(); System.out.println(" ==== 在3后面添加一个数据结束========== " + "\r\n"); System.out.println(" ==== 移除一个数据开始========== "); link.remove(99); link.printList(); System.out.println(" \r\n"); } }main 関数を実行すると、コンソールの出力が表示されます:
以上が二重リンクリストを実現するJavaシミュレーション方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
