public static ArrayList<Integer> printReverse(ListNode head){
ArrayList<Integer> list = new ArrayList<>();
if (head == null) {
return list;
}
ListNode node = head;
Stack<Integer> stack = new Stack<>();
while (node != null){
stack.push(node.val);
node = node.next;
}
while (!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
public static void printReverse1(ListNode head){
if (head != null) {
printReverse1(head.next);
System.out.print(head.val + " ");
}
}
public static ArrayList<Integer> printReverse2(ListNode head){
ArrayList<Integer> ret = new ArrayList<>();
if (head != null) {
ret.addAll(printReverse2(head.next));
ret.add(head.val);
}
return ret;
}
private static ArrayList<Integer> ret = new ArrayList<>();
public static ArrayList<Integer> printReverse3(ListNode head){
print(head);
return ret;
}
private static void print(ListNode head){
if (head != null) {
print(head.next);
ret.add(head.val);
}
}
public static ArrayList<Integer> printReverse4(ListNode head){
ArrayList<Integer> ret = new ArrayList<>();
if (head == null) {
return ret;
}
ListNode memo = new ListNode(-1);
ListNode node = head;
while (node != null) {
ListNode newNode = new ListNode(node.val);
newNode.next = memo.next;
memo.next = newNode;
node = node.next;
}
ListNode newHead = memo.next;
while (newHead != null) {
ret.add(newHead.val);
newHead = newHead.next;
}
return ret;
}