2017-11-04 34 views
0

我在使用迭代器移動雙向鏈表時遇到了家庭作業問題。以下是似乎是問題的方法,但對我來說在邏輯上看來是正確的。我有一個跑步者文件,我用它來傳遞一個列表,跑步者文件打印出向前和向後看我的鏈接是否正常工作。如果我使用add(T元素)方法添加一個項目,它可以很好地向前和向後工作。但是,如果使用add(T元素,int索引)方法添加項目,則列表將正確地向前輸出,但在向後迭代器中,新添加的項目不在輸出中。Java,雙鏈表:我的邏輯錯了嗎?

這讓我懷疑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
newNode.setNextNode(current.getNextNode()); 
current.setNextNode(newNode); 

newNode具有下一個正確設置,電流具有下一個作爲newNode

newNode.setPriorNode(current); 

newNode具有事先設定的正確

current.getNextNode().setPriorNode(newNode); 

current.getNextNode()是newNode,所以你把newNode設置爲newNode的優先級。如果你移動此行早二行

+0

謝謝你這麼它應該工作許多!我現在感覺很傻。如果我有正確的語法,那麼我忽略了一些如此簡單的東西,我非常在意。我只是抓住當前的價值,我把它設置到另一個節點? – Chip594

0

,而不是

current.getNextNode().setPriorNode(newNode); 

嘗試

newNode.getNextNode().setPriorNode(newNode); 
0

可以在最後5行中使用下面的代碼

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

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

size++; 
+0

這就是我所做的,它完美的作品!非常感謝你 – Chip594