题目链接
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路
在这里用三种方法实现,分别用栈结构、数组逆置以及递归来实现
方法一
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//利用栈 先进后出的特性保存起来
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.add(listNode.val);
listNode = listNode.next;
}
//在放在新的arrayList中
ArrayList<Integer> arrayList = new ArrayList<>();
while (!stack.empty()) {
arrayList.add(stack.pop());
}
return arrayList;
}
方法二
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
// 利用数组进行逆置
ArrayList<Integer> arrayList = new ArrayList<>();
while (listNode != null) {
arrayList.add(listNode.val);
listNode = listNode.next;
}
int i = 0;
int j = arrayList.size() - 1;
for (; i < j; ) {
int tmp = arrayList.get(i);
arrayList.set(i, arrayList.get(j));
arrayList.set(j, tmp);
i++;
j--;
}
return arrayList;
}
方法三
// 递归
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arrayList= new ArrayList<>();
printListFromTailToHeadHelper(arrayList,listNode);
return arrayList;
}
private void printListFromTailToHeadHelper(ArrayList<Integer> arrayList, ListNode listNode) {
if (listNode == null) {
return;
}
printListFromTailToHeadHelper(arrayList, listNode.next);
arrayList.add(listNode.val);
}