Return 第一次出现的位置和 return -1 如果在循环链表中没有找到

Return location of first occurrence and return -1 if not found within the circular linked list

如果在循环链表中找不到,我正在尝试将 -1 分配给索引。这是我目前的代码:

public int indexOf(int value){
    Node temp = tail.next;
    int count = 0;
    int index = 0;
    
    while(temp != null) {
        if(temp.value == value) {
            index = count;
            return index;
        }
        count++;
        temp = temp.next;
    }

    return index -1;
    
}

当我测试代码时,结果如下:

列表应该是 [8 12 14]: [ 8 12 14] *** 测试索引 *** 8的索引应该是0:0 14的索引应该是2:2

代码停止,它应该打印不在列表中的 9 的索引,这将是 -1。我不确定如何解决这个问题。我的代码只是运行并且不再产生任何结果(无论如何都不是一种省时的方式)。

我必须这样做吗:

while(temp == null){ 
index = -1;
break; 
  }

感谢任何帮助!

正如 Kaus 在评论中指出的那样,您的 while 循环永远不会在当前状态结束。假设 tail 实际上指向列表中的最后一个元素,可以使用以下代码:

public int indexOf(int value) {
    Node head = tail.next; //tail should be connected to a head
    Node current = head;
    int index = 0;
    do {
        if (current.value == value) {
            return index;
        }
        current = current.next;
        ++index;
    } while (current != head);
    return -1;
}

因为它遍历所有元素(从head开始),如果再次遇到head就结束(假设找不到搜索值)。