如何比较字符串和链接节点中的返回位置



我正试图编写一个方法,返回链表中给定对象的位置。

方法签名应为public int getPosition(T anObject)

我想不通这个方法。以下是我目前所拥有的:

public int getPosition(T anObject) {
    int position = 0;
    Node currentNode = firstNode;
    for(int i = 0; i < length; i++) {
        if(anObject.equals(currentNode.data)) {
            position = i + 1;
            currentNode = currentNode.next;
        }
    }
    return position;
}

我的输出位置没有改变。它保持在零。

这是我的驱动程序。

public class Homework3Driver {
    public static void main(String[] args) {
      String[] names = {"Abby", "Bobby", "Carla", "Doug"};
      LList<String> nameList = new LList(names, 4);
      String[] newNames = {"Edgar", "Frank"};
      nameList.addAll(newNames);
      System.out.println("Output should be 3: " + nameList.getPosition("Carla") + "n");
      System.out.println("Output should be 0 or a negative number: " + nameList.getPosition("George") + "n");
    }
}

一个更简单的解决方案可能是遍历列表,计算位置并逐节点进行比较,直到到达您的节点。

public int getPosition(T anObject)  {
    int position = 0;
    Node currentNode = firstNode;
    while(currentNode != null) {
        if(anObject.equals(currentNode.data)) {
            break; // we found our node so we can stop searching
        }
        position++;
        currentNode = currentNode.next;
    }
    // we iterated through the whole list and didn't find the node
    if(currentNode == null) {
        return -1; // or some other error value
    }
    return position;
}

花点时间思考一下您的逻辑。。。

基本上,当currentNode不是null并且anObject不等于currentNode.data时,您想要循环。当这些条件中的任何一个变为true时,您希望退出循环

例如。。。

int position = 0;
Node currentNode = firstNode;    
while (currentNode != null && !anObject.equals(currentNode.data)) {
    position++;
    currentNode = currentNode.next;
}
return currentNode == null ? -1 : position;

注意,还有其他方法可以实现这一点,但这只是我突然想到的。。。

注意:此解决方案将继续查找项目,直到它到达列表的末尾。这意味着它将返回列表中最后一个匹配项的位置,并且可能更适合getLastPosition()方法

您必须在循环的每次迭代中更新currentNode,而不仅仅是在它匹配的情况下:

for(int i = 0; i < length; i++)
{
    if(anObject.equals(currentNode.data))
    {
        position = i + 1;
        //currentNode = currentNode.next;  // NOT HERE
    }
    currentNode = currentNode.next; // HERE
}

相关内容

  • 没有找到相关文章

最新更新