您的位置:首页 > Web前端

剑指offer之从尾到头打印链表

2017-03-27 20:19 274 查看
题目:从尾到头打印链表

我一开始的思想是:遍历链表ListNode,然后将链表元素添加到链表ArrayList中,然后反向遍历链表ArrayList(坐标从大到小),然后将元素依次将元素添加到新的链表中

上第一次实现代码:

public  void printListFromTailToHead(ListNode listNode) {
List<Integer> list = new ArrayList<Integer>();
while (listNode.next != null) {
list.add(listNode.val);
listNode = listNode.next;
}
list.add(listNode.val);
ArrayList<Integer> array = new ArrayList<Integer>();
for(int i =list.size()-1;i>=0;i--){
array.add(list.get(i));
}
}

自己实现后,看了答案发现其实大体都是相同的, 一共有两种解决方案: (1)递归遍历(2)采用栈的思想先进后出的原则(3)或者最后直接采用java集合的方法Collection.reverse()方法反转。

第一种递归遍历就是讲:在进行循环体是直接使用递归方式 ;第二种方式是在进行添加元素时不需要使用list.add(),而是使用栈stack.push(),遍历的时候判断语句为栈不为空则将元素做出栈操作即stack.pop(); 第三种方式是:不需要采用上面的重新在新建立一个array对象链表,而是采用集合 Collection.reverse(list)直接反转,这也许就是集合最大的用处,通过做本题需要将学过的知识进行结合起来,比如说以前只是知道栈是先进后出,遇到从尾到头输出元素时可以考虑使用栈,缺乏对集合框架的使用。反思反思反思!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arraylist 算法 java