question:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
resolution1:先用一个链表依次保存每个node的值,然后再用一个链表保存反转后的值
/**
* 运行时间:22ms
* 占用内存:9200k
* @param listNode
* @return
*/
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList list = new ArrayList();
ArrayList<Integer> revertList = new ArrayList<>();
while (listNode != null){//判断当前node是否为null进行链表的遍历
list.add(listNode.val);
listNode = listNode.next;
}
for(int i = list.size()-1; i >=0; i--){//这里的i可以取到0
revertList.add((Integer) list.get(i));
}
return revertList;
}
resolution2:采用递归判断下个节点是否为空,直到将指针指到最后一个节点,然后再依次进行取值,最后取出的值就是反转的列表。
ArrayList list = new ArrayList();//作为全局变量,共用同一个list
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode != null) {
printListFromTailToHead(listNode.next);//依次递归,直到指到最后一个node
list.add(listNode.val);//再从最后一个node依次遍历前面的node的值
}
return list;
}