一、问题描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
二、解题思路:
1.递归解法,先输出当前链表的后续链表next,再输出当前节点
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode != null) {
list.addAll(printListFromTailToHead(listNode.next));
list.add(listNode.val);
}
return list;
}
2.再创建一个新链表,将旧链表的值用头插法插到新链表中去
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ListNode head = new ListNode(-1);
while(listNode != null) {
ListNode temp = listNode.next;
listNode.next = head.next;
head.next = listNode;
listNode = temp;
}
head = head.next;
while(head != null) {
list.add(head.val);
head = head.next;
}
return list;
}
3.使用栈先进后出的特性储存链表值,然后再取出来
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
while(listNode != null) {
stack.add(listNode.val);
listNode = listNode.next;
}
while(!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}