LinkedList索引计数器

时间:2014-03-31 10:53:28

标签: java linked-list

我正在构建一个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 refrence为null(自然)。我可以看到问题,但解决方案对我很有帮助。我试过添加类似的东西;

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

似乎没有帮助。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

将循环条件更改为

while(nodeRef != null ){

这基本上应该解决它。

答案 1 :(得分:1)

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

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;
    }
}