贴上代码, 我想问一下嵌套类ReverseArrayIterator中的next() 方法该怎样写,才能完成链表
/**
* 下压栈链表实现
*
* @author maji
* @date 2018-7-14
*/
public class Stack<Item> implements Iterable<Item> {
private Node first;
private int N;
private class Node {
Item item;
Node next;
}
public boolean isEmpty() {
return first == null;
}
public int size() {
return N;
}
public void push(Item item) {
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
N++;
}
public Item pop() {
Item item = first.item;
first = first.next;
N--;
return item;
}
@Override
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item> {
private int i = N;
@Override
public boolean hasNext() {
return i > 0;
}
@Override
public Item next() {
for (Node x = first; x != null; x = x.next) {
return x.item;
}
}
@Override
public void remove() {
}
}
}
import java.util.*;
class Untitled {
class Stack<Item> implements Iterable<Item> {
private Node first;
private int N;
private class Node {
Item item;
Node next;
}
public boolean isEmpty() {
return first == null;
}
public int size() {
return N;
}
public void push(Item item) {
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
N++;
}
public Item pop() {
Item item = first.item;
first = first.next;
N--;
return item;
}
@Override
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item> {
private int i = N;
@Override
public boolean hasNext() {
return i > 0;
}
@Override
public Item next() {
i--;
return pop();
}
@Override
public void remove() {
}
}
}
public void foo()
{
Untitled.Stack<Integer> list = new Untitled.Stack<Integer>();
list.push(new Integer(1));
list.push(new Integer(2));
list.push(new Integer(3));
for (int i : list)
System.out.println(i);
}
public static void main(String[] args) {
new Untitled().foo();
}
}
3
2
1
sandbox> exited with status 0
在 https://tool.lu/coderunner/ 这里测试过了
public void foo()
{
Untitled.Stack<Integer> list = new Untitled.Stack<Integer>();
list.push(new Integer(1));
list.push(new Integer(2));
list.push(new Integer(3));
Iterator<Integer> itl = list.iterator();
while (itl.hasNext()) {
System.out.println(itl.next());
}
}