从链表中的索引获取元素

时间:2013-09-08 19:56:20

标签: java linked-list

我正在编写自己的LinkedList类(我知道API中有一个...等)我的整数存储在我的DLink中,getElement()返回存储在链接中的整数。

我从“return temp.getElement();”行中得到一个空指针异常我的get方法有问题吗?例如,为什么我想要这个方法:当我调用get(0)时,我想返回列表中的第一个元素

public int get(int index)
{

       //forces the index to be valid
      assert (index >= 0 && index < size());

      DLink temp = _firstLink; //start at the head of the list

      //iterate to the correct node
      for(int i = 0; i < index; i++)
      {
          temp = temp._next;
      }

      return temp.getElement(); //and return the corresponding element



    }

这是我的DLink课程,如果你想看一下:

//elements in DLink are integers
public class DLink {
    public int _element;

    public DLink _next;
    public DLink _previous;

    public DLink(int e)
    {
        _next = null;
        _previous = null;

        this._element = e;
    }

    public int getElement()
    {
        return _element;
    }

    public void setNext(DLink link)
    {
        _next = link;
    }
    public void setPrev(DLink link)
    {
        _previous = link;
    }

    public DLink getPrev()
    {
        return _previous;
    }

    public DLink getNext()
    {
        return _next;
    }

}

2 个答案:

答案 0 :(得分:0)

您何时初始化列表?或者更具体一点 - _firstLink在哪里被宣布和分配? 在获取空指针异常之前,您正在进行的调用是什么?

没有看到上下文 - 我的猜测是你没有正确初始化_firstLink

我建议您只需调试此代码并查看您在运行时定义的数据结构。

答案 1 :(得分:0)

如果你得到一个空指针异常,在这种情况下有两个合理的解释。

  1. 你的列表是空的,即没有firstLink开头,你得到一个空指针,因为你试图访问一个尚未初始化的指针。

  2. 您的列表只有一个元素。因此firstLink.next()会给你一个空指针。

  3. 在进入迭代列表的while循环之前,您应该始终执行一些检查。

    if(firstLink == null)
        return;
    
    if(firstLink.next() == null)
        return;
    

    或者你可以在while循环之前有一个初始子句

    if(firstLink != null && firstLink.next() != null)
        while(true)
            ...do-something