当前位置: 首页 > 知识库问答 >
问题:

自定义LinkedList中的addFirst()

吴高峰
2023-03-14

我正在使用customLinkedLists的LinkedList,而我的AddFirst方法的实现遇到了一些问题。

方法如下,

public void addFirst(GenericType data)
{
  Node<GenericType> toAdd = new Node<GenericType>(data);

  if(sizeCounter != 0)
  {
    toAdd.next = head;
    head = toAdd;
    sizeCounter++; 
  } else {
    head = toAdd;
    tail = toAdd;
    toAdd.next = null;
    sizeCounter++;
  }
}

问题是,每次调用它时,它都会正确地增加大小,但当我试图打印出值时,它会抛出一个空指针异常。我知道我设置头/尾指针的方式有问题,但我不知道它到底是什么。

编辑:基本上我有一个OuterList和一个自定义的LinkedList类。

在outer list类中,我有一个对象,它使:

LinkedList<CustomList<GenericType>> oList = new LinkedList<CustomList<GenericType>>;
//method add in OuterList class that calls addFirst in customLinkedClass
public void add(GenericType x){
  oList.get(0).addFirst(x);
}

//Prints the List
public void print(){
  for(int i=0; i<oList.size(); i++){
    for(int j=0; j<oList.get(i).size(); j++){
      // first .get() is for the oList to get the first customLinkedList.
      // second .get() returns the value of the Node in the customLinkedList
      System.out.println(oList.get(i).get(j));
    }
}

当我在添加一个项目后尝试转储时,它会抛出一个空指针。创建customLinkedList时,设置为head.next=tail。这可能是问题的原因吗?我不明白为什么它会给我错误

编辑2:

堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
      at squarelist.CustomList.get(CustomList.java:187)
      at squarelist.OuterList.dump(OuterList.java:94)
      at squarelist.OuterList.main(OuterList.java:106)

行发生在:

public GenericType get(int index){ return getNodeAt(index).value; }

getNodeAt()函数:

private Node<GenericType> getNodeAt( int index ){
  Node<GenericType> p = null;
  p = head.next;
  for( int i = 0; i < index; i++ ){
    p = p.next; 
  }
  return p;
}

共有1个答案

鱼志诚
2023-03-14

更改此:

head = add;
tail = add;

对此:

head = toAdd;
tail = toAdd;

在else块中

编辑

在发布堆栈跟踪之后,问题是您正在从getNodeAt方法返回null。

假设列表中只有一个元素;则p=head.next;将为空,并且返回该值。

请尝试设置p=head

 类似资料:
  • 在自定义arrayAdapter中实现自定义getFilter时遇到问题。实际上,我不知道如何实现它。尝试了各种代码,但仍然没有成功。这是我的自定义阵列适配器。 这是ListTO课程。 这是布局图。 这里的搜索关键字来自“inputSearch”编辑文本。 这是文本更改的侦听器。 谢谢

  • 问题内容: 在上面的代码中,我有2个问题:1)。它具有编译错误:’UINavigationController!’ 没有名为“ pushViewController”的成员 但是在该类中,确实有一个pushViewController方法。 2)。我必须添加注释:@objc(SEPushNoAnimationSegue),否则,在情节提要中,它只能识别随机生成的名称,例如_tcxxxxSEPush

  • 因为LinkedList的java API中有一些方法,比如:删除最后一个节点,然后在LinkedList中的特定索引处插入一个节点。。API中的LinkedList必须是双链接列表,对吗? 我试着制作自己的单链表,但根据我发现的情况,无法在特定索引中插入节点,也无法删除列表中的最后一个节点。所以如果我想这么做,我应该创建自己的双链接列表?

  • 自定义TabBar,可以在任意一个tab右上角加上数字badge。 [Code4App.com]

  • 问题内容: 我正在尝试将我的爱好项目之一移植到linux。最好使用Mono,因为它是用C#编写的。但是我也在研究Python。 该应用程序的功能之一是它需要与自定义协议相关联,因此,当用户单击应用程序网站上的链接时,将调用该应用程序: 像这样,这个和这个的定制协议。 在linux / unix系统中怎么做?我可以像Windows中那样关联系统范围的处理程序吗?还是需要依赖于浏览器? 在Google

  • 问题内容: 如何在Django中定义特定顺序? 具体来说,如果我有QuerySet这样的话:。 我正在寻找以下商品时,按常规订购(使用)会给我。 定义自己的订购技术的正确方法是什么? 问题答案: 据我所知,没有办法以这种方式指定数据库端的排序,因为它过于特定于后端。你可能希望采用老式的Python排序: 如果你发现自己非常需要这种排序,那么建议你为执行排序的模型制作一个自定义子类。就像是: