我的CS教授要求我們使用循環鏈表開發自己的Java程序。我的項目是從循環列表中添加或刪除(String類型的)名稱。到目前爲止,我的添加方法完美地工作;但是,我的removeNode()方法不起作用,並且不會刪除所需的元素。它也會發生無限循環,我嘗試了很多代碼,但都沒有工作。 我remove方法如下:圓形雙鏈表無限循環
public E removeNode(E nodeToBeDeleted)
{
Node<E> nodeFound = findNode(nodeToBeDeleted);
if(nodeFound != null)
{
nodeFound.prev.next = nodeFound.next;
nodeFound.next.prev = nodeFound.prev;
size--;
return nodeFound.data;
}
return null;
}
基本上,findNode()中搜索其數據等於該字符串插入作爲參數的節點,但是當我調用outputList()方法,後者返回屏幕上當前節點的字符串表示形式,它將繼續無限循環。
的outputList方法是:
public void outputList()
{
Node<E> position = head;
do
{
System.out.print(position.data + " ==> ");
position = position.next;
} while((position != null) && (position.next != position));
}
任何幫助,將不勝感激..在此先感謝。
Node類是:
static class Node<E> {
/** The data value. */
private E data;
/** The link to the next node. */
private Node<E> next = null;
/** The link to the previous node. */
private Node<E> prev = null;
private Node(E dataItem) {
data = dataItem;
}
private Node(E newData, Node<E> nodeRef)
{
data = newData;
next = nodeRef;
}
private Node(Node<E> prevRef, E newData)
{
data = newData;
prev = prevRef;
}
//set next link
private Node(Node<E> newData, Node<E> nodeRef)
{
data = (E) newData;
next = nodeRef;
}
} //end class Node
它是否刪除了錯誤的節點?如果是的話哪一個? – kasavbere 2013-02-18 04:02:54
不,它不會刪除String參數或任何其他節點。當我調用outputList()方法時,它會進入一個無限循環並崩潰。 – jv0006 2013-02-18 04:04:25
也根據geekviewpoint.com當你遍歷一個循環鏈表時,你必須打破'if(tmp.right == head){ break ; }'現在我看到www.geekviewpoint.com/java/bst/to_circular_doubly_linked_list_iterative#tabs-2 – kasavbere 2013-02-18 04:05:27