题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
说明:本题目包含复杂数据结构ListNode,点此查看相关信息
解答
读完题第一想法就先正序存储链表,再从尾到头遍历
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode temp = listNode;
//遍历链表
ArrayList<Integer> arrayList = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
while(temp!=null){
arrayList.add(temp.val);
temp=temp.next;
}
if(arrayList.size()!=0){
for (int i = arrayList.size() - 1; i >= 0; i--) {
list.add(arrayList.get(i));
}
}else {
}
return list;
}
}
题解中有人使用了递归解法:
我越发感觉到了自己的菜~
思路还是很清晰的:一直递归知道递归到了链表的最后一个元素,存储该元素的值,返回到倒数第二次的递归,然后存放倒数第二次的值…一直返回知道第一个节点,最后返回ArrayList
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}
题解中还有人给出了栈的解法,也不难理解,有时间再补充~