【问题标题】:Creating a sorted linked list class创建一个排序的链表类
【发布时间】:2012-10-14 04:59:19
【问题描述】:

我正在尝试创建一个扩展 LinkedList 的 SortedLinkedList 类。此类应该将项目添加到 SortedLinkedList 并对其进行排序。

我正在尝试重写 boolean add(E obj) 方法以便按排序顺序添加项目。

在 Stackoverflow 问题上,我发现了以下覆盖 add(E obj) 的方法:

public boolean add(E obj) {
    int index = 0;
    for( ; index<size() ; index++){
        E object= get(index);

        if(obj.compareTo(object) < 0){
            break;
        }
    }

    add(index, obj);
    return true;
};

我了解此方法的工作原理,但我了解到使用 ListIterator 比使用 get(index) 更有效。我一直在尝试使用 ListIterator,但似乎无法让一切正常工作。

这是我使用 Listiterator 所取得的进展,我确定它有问题,但我似乎无法弄清楚:

public boolean add(E obj)
{   
    add(size(), obj);
    ListIterator<E> iterator = listIterator();

    while(iterator.hasNext())
    {
        E object = iterator.next();
        if(obj.compareTo(object)<0)
        {
            //do something;
        }
    }
    return true;
}

关于如何使用迭代器对列表进行排序有什么建议吗?

【问题讨论】:

  • 你到底在坚持什么?
  • 使用 Listiterator 而不是 get(index) 方法对列表进行排序。
  • 从您的帖子中可以明显看出。@matt 表示您在尝试这样做时遇到了什么问题?

标签: java linked-list


【解决方案1】:

不要考虑使用迭代器对列表进行排序。考虑使用迭代器将新元素插入到已排序的列表中。

您的清单一开始是空的。添加第一个元素时,您将拥有一个元素的列表,根据定义,该列表已排序。如果您确保始终在正确的位置添加后续元素,那么列表将保持排序!

这正是使用get 的代码所做的,但正如您所说的那样,这对于链表来说效率不高。您需要做的是使用迭代器重现该算法。

提示:列表迭代器可让您add an element at the current position

【讨论】:

  • 啊,我明白你的意思了。问题是我无法在正确的位置插入元素。因此,如果我举一个简单的例子,例如:list.add(5) 和 list.add(3),那么据我所知,我应该将 5 存储在某个地方,然后将 3 与之比较?
  • 没关系,我已经解决了问题。感谢您的提示,它很有用
猜你喜欢
  • 2020-09-18
  • 2015-06-20
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多