从LinkedList中删除特定元素....?

时间:2017-04-26 06:19:48

标签: java algorithm nullpointerexception linked-list

我试图从链表中删除一个特定元素,但是我得到空指针异常。任何人都可以修复我下面提到的代码......

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--;
    }

2 个答案:

答案 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.nexttemp.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