双向链表逻辑

3

我正在尝试在JUnit中运行一个getPrevious()方法的测试。

public void getPrev(){
    for (int i = 0; i < 1000; i++) {
        list.add(i);    
    }
    list.reset();
    for (int i = 999; i >= 0; i--) {
        int info = list.getPrevious();
        assertEquals(i, info);
    }
}

除了这种方法,其它方法都好像没问题。在进行一些打印测试后,我发现重置方法不起作用。

...reset(){
    if (list != null)
        location = list.getPrev();//returns the last node's previous node -- head node.
}

它应该将位置节点作为头节点,但是它没有返回正确的信息。它返回了null而不是头节点。

因此,我的逻辑让我相信add方法并没有按照预期工作。这也是我的问题。我一直在尝试多种方法来查看错误出现在哪里,但似乎没有任何作用。我想看看是否有人能够帮助找到代码中的逻辑错误。

 public void add(Object elem) {
     LLNode<T> newNode = new LLNode(elem);

     if(list == null){
         tail = list = newNode;
     }
     list.setPrev(newNode);
     newNode.setNext(list);
     newNode.setPrev(tail);
     tail.setNext(newNode);
     list = newNode;
     size++;
 }

为什么需要这两行代码? newNode.setPrev(tail); tail.setNext(newNode); - Rajeev
那么newNode的前一个指针指向尾部,而尾部指向指针,对吧? - user_123945839432
1个回答

3

试试这个

 public int add(Object elem) {
    Node node = new Node(elem);

    if (head == null) {
        head = node;
    } else {
        tail.setNext(node);
        node.setPrevious(tail);
    }

    tail = node;
    return value;
}

你的代码添加得很好,但是当 Junit 测试向后迭代时失败了。 - user_123945839432
迭代失败并非加法方法的问题。问题在于尾部未能正常工作。现在已经解决了!我修改了我的getPrev()方法,现在测试通过了。 - user_123945839432

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接