以奇怪的方式遍历LinkedList?

时间:2015-01-31 01:00:29

标签: java string list find traversal

我希望能够在给定数据之前立即找到数据。 例如,假设您有一个名单列表:

Bob, Tommy, Scott, Frank, Evan, Ryan, Jessy, Alex, Abner, Edward, Smith, Adam

假设方法find()传递一个名称,并按顺序返回它之前的名称。

例如,你运行find(Ryan),它有一个返回Evan的结果。 你会怎么做到这一点?由于没有迭代器,我不确定如何做到这一点。

2 个答案:

答案 0 :(得分:4)

这是一个可以修复问题的简单代码段

LinkedList<String> yourListWithName = new LinkedList<String>();
//Fill your list

ListIterator<String> listIterator = yourListWithName.listIterator();

String previous = null;

while(listIterator.hasNext()) {

    if(listIterator.hasPrevious())
    {

        previous = listIterator.previous();
        listIterator.next();
    }

    String current = listIterator.next();

    if(current.equals(yourReceivedName))
        //Your algorithm
}

答案 1 :(得分:3)

一种选择是使用indexOf

public String find(List<String> names, String name) {
    int index = names.indexOf(name);
    return index > 0 ? names.get(index - 1) : null;
}

然而,这是非常低效的,因为indexOfget都需要迭代。对于相对较小的列表,这不太可能是一个问题。