Вот связанный код списокУдаление узла из дважды связанного списка?
public class LList
{
protected int size;
protected DNode tail, header;
public LList()
{
size = 0;
tail = null;
header = tail;
}
public void addDNode(DNode v)
{
// means list is empty, so add first element
if (header == null)
{
header = v;
tail = header; // first element so (head == tail)
}
else
{
tail.setNext(v);
v.setPrev(tail);
v.setNext(null);
tail = v;
}
size++;
}
и способ удалить узел, проблема
public DNode removeDnode(DNode current)
{
if(current.nextNode() == null)
{
DNode previous = current.prevNode();
previous.setNext(null);
current.setPrev(null);
}
else if (current.prevNode() == null)
{
DNode next = current.nextNode();
next.setPrev(null);
current.setNext(null);
}
else
{
DNode next = current.nextNode();
DNode previous = current.prevNode();
previous.setNext(next);
next.setPrev(previous);
current.setPrev(null);
current.setNext(null);
}
size = size - 1;
return current;
}
Проблема заключается в том, что, когда я использую previous.setNext (NULL); он не позволит мне добавить узел снова, который, я думаю, имеет какое-то отношение к заголовку и хвосту.
однако когда я использую previous.setNext (tail); он, кажется, не удаляет его из списка?
Похоже, домашнее задание. –
Кажется, что ваши первые два блока 'if' в вашем методе' remove' предназначены для 'LinkedList', у которых нет заголовков/хвостов. Весь смысл иметь заголовки и хвосты, так что вы можете рассматривать каждый узел в списке один и тот же. – corsiKa
Не допускайте двойных почтовых отправлений – PTBG