我试图从链表中删除一个特定元素,但是我得到空指针异常。任何人都可以修复我下面提到的代码......
public void deleteElement(T num)
{
Node<T> ele = new Node<T>(num);
if(head == null){
System.out.println("Underflow");
return;
}
Node<T> temp = head;
while(temp != null)
{
if(temp.data == num){
temp.previous.next = temp.next;
return;
}
else
temp = temp.next;
}
size--;
}
答案 0 :(得分:5)
你应该在你的while循环中修改如下:
while(temp != null)
{
if(temp.data == num) {
if(temp.previous != null) {
temp.previous.next = temp.next;
}
// you have to link-up the next's previous with temp's previous too
if(temp.next != null) {
temp.next.previous = temp.previous;
}
temp = null; // to deference the node and let garbage collector to delete/clear this node
break; // don't return here otherwise size-- won't execute
}
temp = temp.next;
}
在引用temp.next
和temp.previous
作为左值之前,您应检查它们是否为null
,否则会引发NullPointerException
。
希望它有所帮助!
答案 1 :(得分:0)
您必须找到Node
等于data
的{{1}}对象。使用这样的循环:
T num
首先是for (Node<T> x = first; x != null; x = x.next) {
if (num.equals(x.data)) {
unlink(x);
return true;
}
}
到第一个节点。在方法删除中,您必须从链接列表中取消链接找到的pointer
:
Node x