链接列表索引计数器



我正在构建一个indexOf 方法。

它返回对象的索引。

public int indexOf(Token obj) {
    int store = 0;
    int tempIndex = 0;
    Node nodeRef = head;
    while(nodeRef.next != null ){
        tempIndex++;
        if(obj.equals(nodeRef.getObject())){
            store = tempIndex;  
        }
        nodeRef = nodeRef.next; 
    }
    System.out.println("Index");
    return store;
    }

我的问题是它没有查看最后一个对象,因为最后一个对象 .next 引用是空的(自然)。我可以看到问题,但解决方案暗示了我。我尝试添加类似的东西;

if(nodeRef.next == null && obj.equals(nodeRef.getObject())){
     tempIndex++;
     store = nodeRef.next
}

不过似乎没有帮助。

任何帮助将不胜感激。

将循环条件更改为

while(nodeRef != null ){

这应该基本上可以解决它。

如果您对更简单的解决方案感兴趣,请查看此示例代码。也许你会发现一些有用的东西:

public static void main(String[] args) {
    Node head = new Node();
    head.addNext().addNext().addNext();
    Node node = head;
    while (node != null) {
        System.out.printf("Index of node no. [%d] is [%d]n", node.no, indexOf(head, node));
        node = node.next;
    }
}
public static int indexOf(Node head, Node node) {
    Node cursor = head;
    for (int index = 0; cursor != null; index++) {
        if (cursor.equals(node)) return index;
        cursor = cursor.next;
    }
    throw new IllegalArgumentException(String.format("Node with no [%d] not member of chain", node.no));
}
class Node {
    Node next = null;
    final int no;
    Node() {
        this.no = 0;
    }
    private Node(Node parent) {
        this.no = parent.no + 1;
    }
    Node addNext() {
        this.next = new Node(this);
        return this.next;
    }
}

相关内容

  • 没有找到相关文章

最新更新