如何从链表中删除指定节点?
How can I remove a specified node from a linked list?
我制作了一个从单链表中删除对象的删除方法。
到目前为止,该方法可以毫无问题地移除第一个节点和第二个节点。当删除第三个节点及之后的节点时,该方法会删除指定节点和头节点之间的所有内容。我的问题是如何让我的方法删除指定的节点而不是它之前的所有内容?
我知道我需要保留对前一个节点的引用,以便将其下一个节点分配给指定的节点下一个节点。这将缩小间隙并移除节点。我明白其中的逻辑,但似乎无法实现它。
public class List_test{
public Node head;
public List(){
head = null;
}
public List(Node head_) {
this.head = head_;
Node ref = head;
}
public void remove(Node node) {
Node ref= head;
if (ref.equals(node)) {
head = head.next;
return;
}
while (ref != null) {
if (ref.equals(node)) {
head.next = node.next;
}
ref = ref.next;
}
}
public static void main(String[] args) {
new List_test();
}
对于删除节点,为什么要更改头指针?您应该使用上一个节点并将其指向要删除的节点的下一个节点。
我认为此页面对此主题有很好的解释:
deleting node in linked list c/c++, java, python
我制作了一个从单链表中删除对象的删除方法。
到目前为止,该方法可以毫无问题地移除第一个节点和第二个节点。当删除第三个节点及之后的节点时,该方法会删除指定节点和头节点之间的所有内容。我的问题是如何让我的方法删除指定的节点而不是它之前的所有内容?
我知道我需要保留对前一个节点的引用,以便将其下一个节点分配给指定的节点下一个节点。这将缩小间隙并移除节点。我明白其中的逻辑,但似乎无法实现它。
public class List_test{
public Node head;
public List(){
head = null;
}
public List(Node head_) {
this.head = head_;
Node ref = head;
}
public void remove(Node node) {
Node ref= head;
if (ref.equals(node)) {
head = head.next;
return;
}
while (ref != null) {
if (ref.equals(node)) {
head.next = node.next;
}
ref = ref.next;
}
}
public static void main(String[] args) {
new List_test();
}
对于删除节点,为什么要更改头指针?您应该使用上一个节点并将其指向要删除的节点的下一个节点。
我认为此页面对此主题有很好的解释: deleting node in linked list c/c++, java, python