题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
示例
{67,0,24,58}
返回值
[58,24,0,67]
解题思路
思路1
取巧办法,根据ArrayList中add(int index,E element)方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4EeFguAU-1616753475036)(C:\Users\26312\AppData\Roaming\Typora\typora-user-images\image-20210326174010390.png)]
可以遍历链表,每次都从第0个位置插入。
代码实现
import java.util.*;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ListNode tmpNode = listNode;
while(tmpNode!=null){
list.add(0,tmpNode.val);
tmpNode = tmpNode.next;
}
return list;
}
}
思路2
使用递归,代码比较简单。注意:需要在方法外建立ArrayList数组。
代码实现
import java.util.*;
public class Solution {
ArrayList<Integer> list = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode tmpNode = listNode;
if(tmpNode!=null){
printListFromTailToHead(tmpNode.next);
list.add(tmpNode.val);
}
return list;
}
}
思路3
根据栈的先进后出原则,使用栈。
代码实现
import java.util.*;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ListNode tmpNode = listNode;
Stack<Integer> stack=new Stack<Integer>();
while(tmpNode!=null){
stack.push(tmpNode.val);
tmpNode=tmpNode.next;
}
while(!stack.empty()){
list.add(stack.pop());
}
return list;
}
}