Javaのリストからノードを削除する方法は何ですか?

Javaでは、LinkedListクラスやカスタムリンクリストクラスを使用してリンクリストを実装し、特定のノードを削除する場合は、次の手順に従うことができます。

  1. 最初に削除するノードを見つけます。リストを繰り返し処理して、削除するノードが見つかるまで探します。
  2. 特定のノードを削除する際には、削除対象の前のノードのnextポインタを削除対象ノードの次のノードに指すようにします。
  3. 指定されたノードのメモリ領域を解放し、そのノードの参照をnullに設定します。

以下は、特定のノードをリストから削除する方法を示すサンプルコードです。

class Node {
    int data;
    Node next;
    
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class LinkedList {
    Node head;
    
    // 在链表末尾添加节点
    public void add(int data) {
        Node newNode = new Node(data);
        
        if (head == null) {
            head = newNode;
        } else {
            Node current = head;
            while (current.next != null) {
                current = current.next;
            }
            current.next = newNode;
        }
    }
    
    // 删除指定节点
    public void delete(int data) {
        Node current = head;
        Node previous = null;
        
        while (current != null) {
            if (current.data == data) {
                if (previous == null) {
                    // 要删除的节点是头节点
                    head = current.next;
                } else {
                    previous.next = current.next;
                }
                current = null; // 释放内存空间
                return;
            }
            previous = current;
            current = current.next;
        }
    }
    
    // 打印链表
    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }
}

public class Main {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.display(); // 输出:1 2 3
        
        list.delete(2);
        list.display(); // 输出:1 3
    }
}

上記のサンプルコードでは、まずカスタムのLinkedListクラスが作成されます。その中で、Nodeクラスはリストのノードを表します。deleteメソッドでは、まずcurrentとpreviousという2つのポインタを使用してリストを走査し、削除するノードを見つけ、その後、ポインタの参照先を変更してノードを削除します。最後に、deleteメソッドでcurrent = nullとしてメモリスペースを解放します。

bannerAds