Javaで単方向リストから特定のノードを削除する方法は何ですか?
以下の手順に従って、単方向リストからノードを削除することができます:
- 最初に削除するノードがヘッドノードかどうかを判断します。ヘッドノードの場合は、単純にヘッドポインタを次のノードに向ければよいです。
- 削除するノードが先頭ノードでない場合、削除する前のノードを見つける必要があります。
- 前のノードの次のポインタを削除するノードの次のノードに向け、削除するノードをスキップします。
- ノードのメモリ領域を解放し、削除操作を完了します。
以下はサンプルコードです。
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のノードが削除されたことを示しています。