题目:
/** * 输入一个链表,按链表从尾到头的顺序返回一个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 按照先进后出的方式进出栈的。