从双向链表中删除 - java

deleting from doubly linked list - java

我想更好地理解我的老师关于如何从双向链表中删除节点的笔记,她在黑板上的是

 public void deleteNode(Node D){
 Node current = head;
 while(current.data != D.data && current.next != null){
  current = current.next;
   }
  d.prev.next = d.next;
  d.next.prev = current.prev.
 }

我不禁觉得这还不足以删除一个节点。我在想也许她的意思是

current.prev.next = d.next and
current.next.prev = d.prev

一旦我弄清楚如何更好地理解这一点,如果我想通过

从中间删除一个节点是否有意义
public void deleteMiddle(){
    Node current = head;
    int i = 0;
    while(i < size/2){
        current = current.next;
        i++;
    }
    deleteNode(current);
}

正确的方法是要么传入值,即 data,要么将方法设为私有,以防止误用。

或者两者都做:

public void deleteNode(int data) {
    Node current = head;
    while (current != null && current.data != data) {
        current = current.next;
    }
    deleteNode(current);
    // Note: We silently do nothing if 'data' not found
}
private void deleteNode(Node node) {
    if (node != null) {
        // Here we can rely on 'node' actually being in our list
        if (node.prev != null)
            node.prev.next = node.next;
        else
            head = node.next;
        if (node.next != null)
            node.next.prev = node.prev;
        else
            tail = node.prev;
    }
}