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

以下の手順に従って、単方向リストからノードを削除することができます:

  1. 最初に削除するノードがヘッドノードかどうかを判断します。ヘッドノードの場合は、単純にヘッドポインタを次のノードに向ければよいです。
  2. 削除するノードが先頭ノードでない場合、削除する前のノードを見つける必要があります。
  3. 前のノードの次のポインタを削除するノードの次のノードに向け、削除するノードをスキップします。
  4. ノードのメモリ領域を解放し、削除操作を完了します。

以下はサンプルコードです。

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class LinkedList {
    private ListNode head;

    public void deleteNode(int val) {
        ListNode current = head;
        ListNode previous = null;

        // 遍历链表找到要删除的节点和其前一个节点
        while (current != null && current.val != val) {
            previous = current;
            current = current.next;
        }

        // 要删除的节点是头节点
        if (current == head) {
            head = head.next;
        }
        // 要删除的节点不是头节点
        else {
            previous.next = current.next;
        }

        // 释放要删除的节点的内存空间
        current = null;
    }
}

使用例:

public class Main {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();

        // 添加节点
        list.head = new ListNode(1);
        ListNode second = new ListNode(2);
        ListNode third = new ListNode(3);
        list.head.next = second;
        second.next = third;

        // 删除节点
        list.deleteNode(2);

        // 打印链表
        ListNode current = list.head;
        while (current != null) {
            System.out.print(current.val + " ");
            current = current.next;
        }
    }
}

結果は1と3で、値が2のノードが削除されたことを示しています。

bannerAds