我在一次java訪談中被問到這個問題。我給了一個整數列表的迭代器。我需要編寫一個函數,該函數返回該迭代器作爲參數,並僅爲偶數返回迭代器。有人告訴我,我無法修改原始數字列表。因此,從列表中刪除奇數並不是解決方案。請指教。謝謝。如何給偶數返回一個迭代器,給定一個整數列表上的迭代器?
3
A
回答
9
那麼你基本上只需要創建一個新的Iterator,它需要一個現有的Iterator並覆蓋它的hasNext和next方法。唯一的困難是一個好的行爲迭代器顯然只需要O(1)空間,所以創建一個新列表並使用它是不好的風格 - 因此我們需要一點點記賬。像下面這樣 - 沒有錯誤處理簡化的僞代碼,假設null作爲無效值等,但對於一個有些通用的解決方案 - 應該給你的基本思路:
Iterator<T> it;
T next;
NewIterator(Iterator<T> it) {
this.it = it;
setNext();
}
void setNext() {
while (it.hasNext()) {
T val = it.next();
if (validT(val)) {
next = val;
return;
}
}
next = null; // lets assume null is invalid.
}
boolean hasNext() {
return next != null;
}
T next() {
T ret = next;
setNext();
return ret;
}
0
Iterator<Integer> itr;
int cur;
OddIterator(Iterator<Integer> itr) {
this.itr = itr;
cur = 0;
}
public boolean hasNext() {
if ((cur & 1) == 1) {
return true;
}
while (itr != null && itr.hasNext()) {
cur = itr.next();
if ((cur & 1) == 1) {
return true;
}
}
return false;
}
public int next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
int tmp = cur;
cur = 0;
return tmp;
}
我希望這將有助於您。如果我的代碼有任何錯誤。請告訴我。
相關問題
- 1. 返回一個迭代器
- 2. 返回一個迭代器
- 3. 返回一個迭代器
- 4. 如何返回一個迭代器列表<T> ::迭代器,作爲函數返回值
- 5. 將一個迭代器的值賦給另一個迭代器C++
- 6. 迭代器返回列表
- 7. 一個整數的迭代
- 8. 只用一個迭代器迭代兩個列表Java
- 9. 積極的迭代設計給定的IntegerIterator整數迭代
- 10. 在Python中,如何迭代一個迭代器,然後迭代另一個迭代器?
- 11. 整數迭代器
- 12. 從模板函數返回一個迭代器到STL容器
- 13. 如何在Java中將一個迭代器的內容傳遞給另一個迭代器?
- 14. Iterable#iterator()是否返回一個新的迭代器或現有的迭代器?
- 15. 迭代器中的整數序列迭代器(Java)
- 16. 列表迭代器下一個功能
- 17. 迭代範圍與第一給出最後的迭代器
- 18. 用給定的分佈創建一個無盡的迭代器
- 19. vectorS的一個迭代器
- 20. 迭代兩個數據集並將結果返回給一個數據集
- 21. 如何迭代一個表?
- 22. 遞增一個常數foward迭代器
- 23. 恢復一個迭代器
- 24. kohana下一個迭代器
- 25. 給定一個迭代器替換std :: list對象
- 26. 轉換一個C++迭代到迭代器上的部件(選擇迭代?)
- 27. 從給定的映射迭代器反向迭代
- 28. STL如何用相同的函數返回2個迭代器?
- 29. 如何讓Lua迭代器返回一個C結構?
- 30. 函數返回向量的迭代器
我認爲這基本上是正確的。 'setNext'沒有時間限制。因此,setNext,hasNext和next應該同步。 – emory 2012-03-28 02:25:12
我不確定構造函數已經開始掃描底層迭代器是可以接受的... – Kaarel 2013-02-07 11:47:17
@Kaarel那麼你可以很容易地改變它,但唯一的另一個可能的地方是你可以在'hasNext'調用,這更糟糕.. – Voo 2013-02-07 21:08:55