剑指offer-3-从尾到头打印链表
从尾到头打印链表
http://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
思路:
- 从头遍历 :如果知道java ArrayList的 add()方法其实是插入方法add(0,val),在0处插入,后面都往后移动一格,
理论上可以一次遍历输出,这个方法调用arraycopy方法把后面的元素往后移动一个位置,native方法,效率应该是很高了。 - 递归(栈):这个思路和前序遍历二叉树一致,递归的缺点在于占内存。
- 反转链表:利用三个指针反转这个链表,然后遍历。
代码
从头遍历
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arr=new ArrayList<>(); while(listNode!=null){ arr.add(0,listNode.val); listNode=listNode.next; } return arr; } }
剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构