[Java] 341. Flattened nested list iterator---review interface as parameters and return values! ! !

Give you a nested list of integers. Please design an iterator so that it can traverse all the integers in this integer list.

Each item in the list is either an integer or another list. The elements of the list may also be integers or other lists.

Example 1:

Input: [[1,1],2,[1,1]]
Output: [1,1,2,1,1]
Explanation: By repeatedly calling next until hasNext returns false, the order of the elements returned by next should be: [1,1,2,1,1].
Example 2:

Input: [1,[4,[6]]]
Output: [1,4,6]
Explanation: By repeatedly calling next until hasNext returns false, the order of the elements returned by next should be: [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;   
    }
}

Guess you like

Origin blog.csdn.net/qq_44461217/article/details/115111144