解题思路一:
翻转链表,然后打印,但是这样改变原来的链表
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null)
return new ArrayList<Integer>();
//翻转链表,需要空间复杂度为 O(1)
ArrayList<Integer> result = new ArrayList<>();
ListNode tail = new ListNode(0);
tail.next = null;
ListNode currentNode = listNode;
while (listNode != null) {
currentNode = listNode;
listNode = listNode.next;
currentNode.next = tail;
tail = currentNode;
}
while (currentNode.next != null) {
result.add(currentNode.val);
currentNode = currentNode.next;
}
return result;
}
}
解题思路二
使用递归 ,优点是不改变原来链表的结构,但是空间复杂度高,需要O(n)
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null) {
return new ArrayList<Integer>();
}
ArrayList<Integer> res = new ArrayList<>();
printList(res, listNode);
return res;
}
public void printList(ArrayList<Integer> list, ListNode listNode) {
if (listNode.next == null){
list.add(listNode.val);
return;
}
printList(list, listNode.next);
list.add(listNode.val);
}
}