簡體   English   中英

遍歷鏈表

[英]Iterating through a linked list

我制作了一個LinkedList,它具有一個實現接口Iterator<E>的LinkedListIterator。

該接口具有以下功能:

Next();
hasNext();

我試圖使用返回Iterator<E>對象的迭代器函數遍歷LinkedList。 這是我的功能:

public Iterator<E> iterator(int stop) {

    if(size==0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }
    Iterator<E> result = new LinkedListIterator();
    for(int i = 0; i<stop; i++){
        result.next();
    }
    return result;
}

我還有一個測試類,通過模擬Iterator來運行:

public class TestLinkedList {

    public static void main(String[] args) {

        //StudentInfo.display();

        LinkedList<Integer> xs;
        final int MAX_SIZE = 5;

        for (int stop = 0; stop<MAX_SIZE; stop++) {
            for (int start = 0; start<=stop; start++) {

                System.out.println("start="+start+", stop="+stop);

                xs = new LinkedList<Integer>();

                for (int i=0; i<MAX_SIZE; i++) {
                    xs.addLast(i);
                }

                System.out.println(xs);

                Iterator<Integer> i = xs.iterator(stop);

                while (i.hasNext()) {
                    System.out.println(i.next());
                }
            }
        }
    }
}

這是我對迭代器的另一種實現:

public Iterator<E> iterator(int start, int stop) {
    if(size == 0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }

    Iterator<E> result = new LinkedListIterator();
    for(int i = start; i<stop; i++){
        result.next();
    }
    return result;
}

運行模擬時,得到以下結果:

start=0, stop=0
{0,1,2,3,4}
0
1
2
3
4
start=0, stop=1
{0,1,2,3,4}
1
2
3
4
start=1, stop=1
{0,1,2,3,4}
1
2
3
4
start=0, stop=2
{0,1,2,3,4}
2
3
4
start=1, stop=2
{0,1,2,3,4}
2
3
4
start=2, stop=2
{0,1,2,3,4}
2
3
4
start=0, stop=3
{0,1,2,3,4}
3
4
start=1, stop=3
{0,1,2,3,4}
3
4
start=2, stop=3
{0,1,2,3,4}
3
4
start=3, stop=3
{0,1,2,3,4}
3
4
start=0, stop=4
{0,1,2,3,4}
4
start=1, stop=4
{0,1,2,3,4}
4
start=2, stop=4
{0,1,2,3,4}
4
start=3, stop=4
{0,1,2,3,4}
4
start=4, stop=4
{0,1,2,3,4}
4

什么時候應該得到以下結果:

// start=0, stop=0
// {0,1,2,3,4}
// 0
// start=0, stop=1
// {0,1,2,3,4}
// 0
// 1
// start=1, stop=1
// {0,1,2,3,4}
// 1
// start=0, stop=2
// {0,1,2,3,4}
// 0
// 1
// 2
// start=1, stop=2
// {0,1,2,3,4}
// 1
// 2
// start=2, stop=2
// {0,1,2,3,4}
// 2
// start=0, stop=3
// {0,1,2,3,4}
// 0
// 1
// 2
// 3
// start=1, stop=3
// {0,1,2,3,4}
// 1
// 2
// 3
// start=2, stop=3
// {0,1,2,3,4}
// 2
// 3
// start=3, stop=3
// {0,1,2,3,4}
// 3
// start=0, stop=4
// {0,1,2,3,4}
// 0
// 1
// 2
// 3
// 4
// start=1, stop=4
// {0,1,2,3,4}
// 1
// 2
// 3
// 4
// start=2, stop=4
// {0,1,2,3,4}
// 2
// 3
// 4
// start=3, stop=4
// {0,1,2,3,4}
// 3
// 4
// start=4, stop=4
// {0,1,2,3,4}
// 4

我不明白我的Iterator函數中缺少什么,有人可以幫我這個忙嗎?

看起來您的迭代器生成不正確。 首先要生成迭代器,然后使用.next()從前端刪除stop數量的元素,然后返回一個迭代器,該迭代器將通過列表的其余部分運行,直到hasNext()返回false為止。 您的方法應讀取類似的內容。

public Iterator<E> iterator(int start) {
    if(size == 0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }
    Iterator<E> result = new LinkedListIterator();
    for(int i = 0; i<start; i++){
        result.next();
    }
    return result;
}

為了執行停止值。 我想您將不得不更改LinkedListIterator的實現,以允許屬性導致hasNext()在結束之前返回錯誤的stop元素數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM