数据结构-栈的使用-输入一个链表,按链表从尾到头的顺序返回一个ArrayList

题目:

/**
 * 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
 */

方法1:arraylist倒置

方法2:使用栈

/**
 * 栈(stack),是一种线性存储结构,它有以下几个特点:
 * (01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
 * (02) 向栈中添加/删除数据时,只能从栈顶进行操作。
 * 栈通常包括的三种操作:push、peek、pop。
 * push -- 向栈中添加元素。
 * peek -- 返回栈顶元素。
 * pop -- 返回并删除栈顶元素的操作。
 */
/**
     * 思路1,无情枚举
     */
    static void method1(ArrayList<Integer> list) {//看得懂不?昂
        //临时变量
        ArrayList<Integer> tmp = new ArrayList<Integer>();
        //for
        for (int index = list.size() - 1; index >= 0; index--) {//能看懂吗???en为啥-1数组第一个是0勾
            //反向插入
            tmp.add(list.get(index));//懂?????额get(int index )获取嗯嗯
        }
        //这是for另一种用法,遍历迭代
        StringBuffer stringBuffer = new StringBuffer();//创建stringbuffer这里做笔记,stringbuffer和string和stringbuilder的区别
        for (Integer i : tmp) {
            stringBuffer.append(i);//加入元素值
        }

        System.out.println(stringBuffer.toString());//输出倒过来之后的结果
    }

    /**
     * 思路2,利用栈的lifo(做笔记)特性
     */
    static void method2(ArrayList<Integer> list){
        //创建一个栈队列
        Stack<Integer> stack=new Stack<Integer>();
        //往里面压数据
        for (Integer i:list)
            stack.push(i);
        //这是for另一种用法,遍历迭代
        StringBuffer stringBuffer = new StringBuffer();//创建stringbuffer这里做笔记,stringbuffer和string和stringbuilder的区别
        while (!stack.empty()){//栈顶元素不为空就循环(做笔记,peek和pop的区别)
            stringBuffer.append(stack.pop());
        }

        System.out.println(stringBuffer.toString());//输出倒过来之后的结果
    }

测试方法

 public static void main(String[] args) {
        //测试方法1 这种方法懂了没有? 嗯嗯 别的方法明天再说吧 我要累死了,不行,今天跟你讲,然后你整理笔记
        ArrayList<Integer> list=new ArrayList<Integer>();
        for (int i=0; i<10; i++)
            list.add(i);
        method1(list);
        method2(list);
    }

运行结果

9876543210
9876543210

总结 stringbuffer是线程安全的,string跟stringbuffer的区别:string的内容一旦声明后内容不可以改变,要改变也是改变指向string栈的地址,而stringbuffer类的对象内容是可以改变的。LIFO Last In First Out 按照先进后出的方式进出栈的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值