HOWTO · Java

Java でリンク リストからノードを削除する

このチュートリアルでは、Java でリンク リストからノードを削除する方法を示します。

このページの内容

このチュートリアルでは、Java でリンク リストからノードを削除する方法を示します。

Java でリンク リストからノードを削除する

リンク リストは、リンク リスト データ構造を実装する Java の util パッケージのデータ構造の一種です。 リンクされたリストは線形データ構造と見なされ、各要素はアドレスとデータ部分を持つ個別のオブジェクトであり、要素は感染場所に保存されません。

リンクされたリストからノードを削除するには、特定のキーの最初の出現を削除するプロセスに従います。

リンクされたリストからノードを削除する手順は次のとおりです。

  • まず、指定されたノードの前のノードを見つける必要があります。 これは、ノードが削除される前にノードを見つけることを意味します。
  • 次のステップは、前のノードのテキストを変更することです。
  • 最後に、削除可能なノードのメモリを解放する必要があります。

これは、C の malloc() メソッドを使用してすべてのノードが動的に割り当てられる反復プロセスであるため、毎回 free() メソッドを呼び出してメモリを解放する必要があります。

Java で指定されたリンク リストからノードを削除する例を試してみましょう。

package delftstack;

public class Example {
  class DemoNode {
    int NodeData;
    DemoNode NextNode;

    public DemoNode(int NodeData) {
      this.NodeData = NodeData;
      this.NextNode = null;
    }
  }

  // head and tail node
  public DemoNode HeadNode = null;
  public DemoNode TailNode = null;

  // to add new nodes
  public void Add_Node(int NodeData) {
    DemoNode NewNode = new DemoNode(NodeData);
    if (HeadNode == null) {
      HeadNode = NewNode;
      TailNode = NewNode;
    } else {
      TailNode.NextNode = NewNode;
      TailNode = NewNode;
    }
  }

  // To delete nodes
  public void DeleteNode() {
    if (HeadNode == null) {
      System.out.println("List is empty");
      return;
    } else {
      // Checks if the list contains only one element
      if (HeadNode != TailNode) {
        DemoNode current = HeadNode;
        // Iterate through the list till the second last element
        while (current.NextNode != TailNode) {
          current = current.NextNode;
        }
        TailNode = current;
        TailNode.NextNode = null;
      } else {
        HeadNode = TailNode = null;
      }
    }
  }

  // To display the node
  public void DisplayNode() {
    DemoNode CurrentNode = HeadNode;
    if (HeadNode == null) {
      System.out.println("List is empty");
      return;
    }
    while (CurrentNode != null) {
      System.out.print(CurrentNode.NodeData + " ");
      CurrentNode = CurrentNode.NextNode;
    }
    System.out.println();
  }

  public static void main(String[] args) {
    Example Linked_List = new Example();

    // Adds nodes to the list
    Linked_List.Add_Node(1);
    Linked_List.Add_Node(2);
    Linked_List.Add_Node(3);
    Linked_List.Add_Node(4);

    System.out.println("The Original List is: ");
    Linked_List.DisplayNode();

    while (Linked_List.HeadNode != null) {
      Linked_List.DeleteNode();

      System.out.println("The list after Deleting a Node: ");
      Linked_List.DisplayNode();
    }
  }
}

上記のコードは、最初にノードをリンク リストに追加し、次にリストの最後からノードを削除します。 出力を参照してください。

The Original List is:
1 2 3 4
The list after Deleting a Node:
1 2 3
The list after Deleting a Node:
1 2
The list after Deleting a Node:
1
The list after Deleting a Node:
List is empty