从双向链表中删除 - 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;
}
}
我想更好地理解我的老师关于如何从双向链表中删除节点的笔记,她在黑板上的是
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;
}
}