当前位置: 首页 > 知识库问答 >
问题:

循环双链表无限循环

许兴文
2023-03-14
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

共有1个答案

温峻熙
2023-03-14
while((position != null) && (position.next != position))

这确实应该是:

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

想象一下,如果您有一个单例--遍历的绝对基本情况。当您开始时,headposition都将指向它,而当您希望前进时,position将再次引用与head相同的位置。这将会无限地继续下去。

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

 类似资料:
  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 我创建了一个双循环链表。 我需要知道每个节点到头部的距离。 因为当我必须删除或获取具有特定密钥的节点时,如果两个节点具有相同的密钥和相同的距离,则必须删除或获取这两个节点,否则必须删除最靠近头部的节点。 我不知道如何计算距离,因为它是圆形的。。。 这个链表的插入就是这样工作的。 所有的节点都去追头。 例: 1)头部 2) 头部A(插入A) 3) 头部B-A(插入B) 4) 头部C-B-A(插入C)

  • 双向循环链表 在“数据结构”课程中,如果创建某种数据结构的双循环链表,通常采用的办法是在这个数据结构的类型定义中有专门的成员变量 data, 并且加入两个指向该类型的指针next和prev。例如: typedef struct foo { ElemType data; struct foo *prev; struct foo *next; } foo_t; 双向循环链表的

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 1.一般链表 图解链表: 链表 实现: <!doctype html> <html> <head> <meta charset="utf-8" > </head> <body> <script> function Node(ele) { this.ele=ele; this.next=null; } func