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就结束(假设找不到搜索值)。
如果在循环链表中找不到,我正在尝试将 -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就结束(假设找不到搜索值)。