/**
*    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) {
        ArrayList<Integer> arraylist = new ArrayList<Integer>();
        //为空返回
        if(listNode == null) return arraylist;

        ListNode p = listNode.next;
        listNode.next = null;
        ListNode q = listNode;
        while(p != null) {
            q = p;
            p = p.next;
            q.next = listNode;
            listNode = q;
        }
        while(q != null) {
            arraylist.add(q.val);
            q = q.next;
        }

        return arraylist;
    }
}

链表的就地逆置,然后从新的头结点开始将节点输入到ArrayList数组中,注意如果传入的节点内容为空,不能直接返回null