删除双向链表中给定位置的节点
Deleting a Node at a given position in a Doubly Linked List
我正在尝试删除给定索引处的一个节点,但我的测试一直失败,有时甚至得到 NullPointerException
。这是我到目前为止所做的:
public void remove(int pos)
{
if (head == last)
{
head = null;
last = null;
}
if (pos == size - 1)
return removeLast();
if (pos == 0)
return removeFirst();
else
{
DoubleListNode<E> current = head;
for (int i = 0; i < pos - 1; i ++)
{
current = current.getNext();
}
current.setNext(current.getNext().getNext());
current.getNext().getNext().setPrev(current);
return current.getData();
}
}
从双向链表中删除的步骤:
让要删除的节点为del.
- 如果要删除的节点是头节点,则将头指针改为
下一个现任负责人。
- 如果 del 的前一个存在,则将前一个的下一个设置为 del。
- 如果 del 的 next 存在,则设置 del 的 prev。
记住,这里你必须同时维护previous和next指针
以及处理双方的空条件。
我正在尝试删除给定索引处的一个节点,但我的测试一直失败,有时甚至得到 NullPointerException
。这是我到目前为止所做的:
public void remove(int pos)
{
if (head == last)
{
head = null;
last = null;
}
if (pos == size - 1)
return removeLast();
if (pos == 0)
return removeFirst();
else
{
DoubleListNode<E> current = head;
for (int i = 0; i < pos - 1; i ++)
{
current = current.getNext();
}
current.setNext(current.getNext().getNext());
current.getNext().getNext().setPrev(current);
return current.getData();
}
}
从双向链表中删除的步骤:
让要删除的节点为del.
- 如果要删除的节点是头节点,则将头指针改为 下一个现任负责人。
- 如果 del 的前一个存在,则将前一个的下一个设置为 del。
- 如果 del 的 next 存在,则设置 del 的 prev。
记住,这里你必须同时维护previous和next指针 以及处理双方的空条件。