首页 新闻 搜索 专区 学院

自己用java实现了栈,但是pop()出来的数据不对,是跳着输出的(隔一个输出一个)

0
[已解决问题] 解决于 2018-08-31 13:46
public class LinkedStackInnerImpl<T> {
    private class Node {
        T item;
        Node next;

        Node() {
            this.item = null;
            this.next = null;
        }

        Node(T item, Node next) {

            this.item = item;
            this.next = next;
        }

        boolean end() {
            return next == null && item == null;
        }

    }

    Node top = new Node();//哨兵

    public void push(T item) {
        top = new Node(item, top);
    }

    public T pop() {
        T result = top.item;
        if (!top.end()) {
            top = top.next;
        }
        return result;
    }

    public static void main(String[] args) {
        LinkedStackInnerImpl<String> linkedStackInner = new LinkedStackInnerImpl<>();
        for (String s : "123 1231 312 qwe ad z cxza sd zcd sdfse r ".split(" ")){
            linkedStackInner.push(s);
            System.out.print(s+" " );
        }
        System.out.println();
        while ( linkedStackInner.pop() != null){
            System.out.print(linkedStackInner.pop()+" ");
        }
    }

}

输出:

123 1231 312 qwe ad z cxza sd zcd sdfse r 
sdfse sd z qwe 1231 null 
沉焱的主页 沉焱 | 菜鸟二级 | 园豆:204
提问于:2018-08-30 15:20
< >
分享
最佳答案
2
 while ( linkedStackInner.pop() != null){  //pop 已经出栈了 
       System.out.print(linkedStackInner.pop()+" "); //又出一次
 }
奖励园豆:5
秋壶冰月 | 大侠五级 |园豆:5669 | 2018-08-30 21:53
其他回答(2)
1

每执行一次linkedStackInner.pop()都是出栈一次

wdwwtzy | 园豆:226 (菜鸟二级) | 2018-08-31 10:17
1

每次执行linkedStackInner.pop()就是一次出栈,所以你可以设置个变量来存储这个值,而不是直接再调用一次这个方法

PottyHarry | 园豆:302 (菜鸟二级) | 2018-08-31 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册