gpt4 book ai didi

java - 循环双链表无限循环

转载 作者:行者123 更新时间:2023-11-29 03:37:05 26 4
gpt4 key购买 nike

我的 CS 教授要求我们使用循环链表开发​​自己的 Java 程序。我的项目是从循环列表中添加或删除名称(字符串类型)。到目前为止,我的添加方法运行良好;但是,我的 removeNode() 方法不起作用,也没有删除所需的元素。它还会进入无限循环,我已经尝试了很多代码,但它们都不起作用。我的删除方法如下:

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));
}

如有任何帮助,我们将不胜感激。提前致谢。

节点类是:

    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

最佳答案

while((position != null) && (position.next != position))

这真的应该是:

while((position != null) && (position.next != head))

想象一下,如果您有一个单例 - 遍历的绝对基本情况。 headposition 都会在你开始的时候指向它,当你想前进时,position 会和 指向同一个地方code>head 再一次。这将无限持续下去。

当您再次到达起点时,迭代必须停止。

关于java - 循环双链表无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com