Java,Doubly-Link List:我的逻辑错了吗?

时间:2017-11-04 00:35:08

标签: java doubly-linked-list

我在完成家庭作业时遇到了麻烦,使用迭代器移动了双向链表。以下是似乎是问题的方法,但对我来说似乎在逻辑上是正确的。我有一个我用来传递列表的跑步者文件,跑步者文件打印出前后两个以查看我的链接是否正常工作。如果我使用add(T元素)方法添加项目,它向前和向后都可以正常工作。但是,如果我使用add(T element,int index)方法添加项目,则列表将正确地向前输出,但在向后迭代器上,新添加的项目不在输出中。

让我怀疑current.getNextNode().setPriorNode(newNode);是问题,但似乎对我来说是对的,或者我错了?

谢谢!

更新:我使用修复程序编辑了代码,以防其他人在将来遇到同样的问题。

public void add(T element) {

    Node<T> node = new Node(element);

    if (itsFirstNode == null) {
        itsFirstNode = node;
        itsLastNode = node;
    }
    else {
        itsLastNode.setNextNode(node);
        node.setPriorNode(itsLastNode);
        itsLastNode = node;
    }
    size++;
} // end of add() method

  public void add(T element, int index) {
    int counter = 0;
    Node<T> newNode = new Node(element);
    Node<T> current = itsFirstNode;
    while (current.getNextNode() != null ) {
        if (counter == index - 1 )
            break;
        current = current.getNextNode();
        counter++;
    }
    newNode.setNextNode(current.getNextNode());
    current.getNextNode().setPriorNode(newNode);

    newNode.setPriorNode(current);
    current.setNextNode(newNode);

    size++;
} // end of Overloaded add() method

3 个答案:

答案 0 :(得分:3)

newNode.setNextNode(current.getNextNode()); 
current.setNextNode(newNode);

newNode正确设置下一个,当前下一个设置为newNode

newNode.setPriorNode(current);

newNode先前已正确设置

current.getNextNode().setPriorNode(newNode);

current.getNextNode()是newNode,因此您将newNode设置为newNode的优先级。如果你将这行提前两行移动

,它应该可以工作

答案 1 :(得分:0)

而不是

current.getNextNode().setPriorNode(newNode);

尝试

newNode.getNextNode().setPriorNode(newNode);

答案 2 :(得分:0)

您可以在最后5行使用以下代码

newNode.setNextNode(current.getNextNode());
current.getNextNode().setPriorNode(newNode);

current.setNextNode(newNode);
newNode.setPriorNode(current);

size++;