题目描述 输入链表的第一个节点,从尾到头反过来打印出每个结点的值。
解体思路
1.使用栈Stack
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while(listNode != null) {
stack.add(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while(!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}
2.使用递归,时间复杂度较大
ArrayList<Integer> list = new ArrayList<>();
while(listNode != null) {
list.addAll(printListFromTailToHead(listNode.next));
list.add(listNode.val);
}
return list;
3.使用Collections的reverse方法
ArrayList<Integer> list = new ArrayList<>();
while(listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(list);
return list;
4.使用链表头插法
ListNode head = new ListNode(-1);
while(listNode != null) {
ListNode min = listNode.next;
listNode.next = head.next;
head.next = listNode;
listNode = min;
}
ArrayList<Integer> list = new ArrayList<>();
head = head.next;
while(head != null) {
list.add(head.val);
head = head.next;
}
return list;