题目
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路
-
方案一:
使用ArrayList中的public void add(int index, E element)方法
分析add(int index, E element)public void add(int index, E element) { rangeCheckForAdd(index); checkForComodification(); l.add(index+offset, element); this.modCount = l.modCount; size++; }
需要保证当前数组容量够用, 然后把从index处一直到尾部的数组元素都向后挪一位. 最后把要插入的元素赋给数组的index处.
-
方案二:
1、引入一个栈,因为栈是先入后出的,所以先将链表中的数据push到栈
2、将栈中的数据pop(),放入ArrayList中 -
方案三
采用链表反转的方式
代码实现
-
方案一
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { // 定义一个ArrayList ArrayList list = new ArrayList(); while (listNode != null) { // 调用list中add方法 list.add(0, listNode.val); listNode = listNode.next; } return list; }
-
方案二
public ArrayList printListFromTailToHead(ListNode listNode) { // 定义一个ArrayList和栈 ArrayList list = new ArrayList(); Stack stack = new Stack(); // 对链表做循环放入栈中 while (listNode != null) { stack.push(listNode.val); listNode = listNode.next; } // 数据出栈放入list中 while (!stack.empty()) { list.add(stack.pop()); } return list; }```