我必须使用PushbackIterator
使用pushback(E)
方法。
因此,如果aIter
中的值小于bIter
中的值,则会返回aIter
,而bIter
中的值会被放入pushback(E)
方法,反之亦然。
如果原始列表是
(1,4,5)和(2,3,6)
然后结果列表将是
(1,2,3,4,5,6)
我相信我需要确定迭代器是否没有值。因此,如果bIter没有更多元素,我从aIter获取一个元素并将其添加到结果列表中。
如何确定迭代器是否没有更多值?
public static<E extends Comparable<E>> List<E> mergeSortedLists(List<E> a, List<E> b) {
List<E> result = new ArrayList<E>();
PushbackIterator<E> aIter = new PushbackIterator<E>(a.iterator());
PushbackIterator<E> bIter = new PushbackIterator<E>(b.iterator());
while (aIter.hasNext() && bIter.hasNext()) {
if (aIter.next().compareTo(bIter.next()) < 0) {
result.add(aIter.next());
aIter.pushback(bIter.next());
}
if (aIter.next().compareTo(bIter.next()) > 0)
result.add(bIter.next());
bIter.pushback(aIter.next());
}
return result;
}
答案 0 :(得分:1)
如果其中一个迭代器没有更多元素,则while
终止,因此之后您只需添加迭代器的其余元素:
while (aIter.hasNext()) {
result.add(aIter.next());
}
while (bIter.hasNext()) {
result.add(bIter.next());
}
顺便说一句,您的代码有一些缺陷,因为您在添加元素之前多次调用.next()
。因此,您将跳过元素。试试这个:
public static<E extends Comparable<E>> List<E> mergeSortedLists(List<E> a, List<E> b) {
List<E> result = new ArrayList<E>();
PushbackIterator<E> aIter = new PushbackIterator<E>(a.iterator());
PushbackIterator<E> bIter = new PushbackIterator<E>(b.iterator());
while (aIter.hasNext() && bIter.hasNext()) {
E aElem = aIter.next();
E bElem = bIter.next();
if (aElem.compareTo(bElem) <= 0) {
result.add(aElem);
bIter.pushback(bElem);
} else {
result.add(bElem);
aIter.pushback(aElem);
}
}
while (aIter.hasNext()) {
result.add(aIter.next());
}
while (bIter.hasNext()) {
result.add(bIter.next());
}
return result;
}