[Java] 341.フラット化されたネストされたリストイテレータ---パラメータおよび戻り値としてインターフェイスを確認してください!!!

整数のネストされたリストを提供します。この整数リスト内のすべての整数をトラバースできるようにイテレータを設計してください。

リスト内の各項目は、整数または別のリストのいずれかです。リストの要素は、整数または他のリストでもかまいません。

例1:

入力:[[1,1]、2、[1,1]]
出力:[1,1,2,1,1]
説明:hasNextがfalseを返すまでnextを繰り返し呼び出すことにより、nextによって返される要素の順序は次のようになります。 be:[1,1,2,1,1]。
例2:

入力:[1、[4、[6]]]
出力:[1,4,6]
説明:hasNextがfalseを返すまでnextを繰り返し呼び出すと、nextによって返される要素の順序は次のようになります:[1,4,6 ]。

代码:
接口类
public interface NestedInteger {
    
    
	 public boolean isInteger();
	
	 public Integer getInteger();
	
	 public List<NestedInteger> getList();
}
实现类
public class A implements NestedInteger {
    
    
	private Integer aInteger;
    private List<NestedInteger> list;
    public A(Integer aInteger,List<NestedInteger> list) {
    
    
    	this.aInteger=aInteger;
    	this.list=list;
    }
	@Override
	public boolean isInteger() {
    
    
		if(aInteger!=null) {
    
    
			return true;
		}
		return false;
	}

	@Override
	public Integer getInteger() {
    
    
		return aInteger;
	}

	@Override
	public List<NestedInteger> getList() {
    
    
		return list;
	}
}
应用类
class NestedIterator implements Iterator<Integer> {
    
    
    
    public static void main(String[] args) {
    
    
    	List<NestedInteger> a=new ArrayList<>();
    	List<NestedInteger> b=new ArrayList<>();
		A a1=new A(1,null);
		A a2=new A(2,null);
		A a3=new A(3,null);
		a.add(a2);
		a.add(a3);
		A a4=new A(null,a);
		b.add(a1);
		b.add(a4);
		NestedIterator aa=new NestedIterator(b);
		while(aa.hasNext()) {
    
    
			System.out.println(aa.next());
		}
	}
    Stack<NestedInteger> stack=new Stack<>();
    public NestedIterator(List<NestedInteger> nestedList) {
    
    
        for(int i=nestedList.size()-1;i>=0;i--) {
    
    
        	stack.add(nestedList.get(i));
        }
    }

    @Override
    public  Integer next() {
    
    
		return stack.pop().getInteger();
        
    }

    @Override
    public boolean hasNext() {
    
    
    	while(!stack.isEmpty()) {
    
    
    	    NestedInteger a=stack.peek();
    	    if(a.isInteger()) {
    
    
    	    	return true;
    	    }
    	    List<NestedInteger> list=stack.pop().getList();
    	    for(int i=list.size()-1;i>=0;i--) {
    
    
            	stack.add(list.get(i));
            }
    	}
		return false;   
    }
}

おすすめ

転載: blog.csdn.net/qq_44461217/article/details/115111144