从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
头插法。时间复杂度O(N),空间复杂度O(N)。
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public int[] reversePrint(ListNode head) {
ListNode newList = null;
int len = 0;
while (head != null) {
ListNode next = head.next;
// 插入头部
head.next = newList;
newList = head;
// 下一个继续遍历
head = next;
len++;
}
int arr[] = new int[len];
while (newList != null) {
arr[arr.length - len] = newList.val;
newList = newList.next;
len--;
}
return arr;
}
辅助栈。时间复杂度O(N),空间复杂度O(N)。
public int[] reversePrint(ListNode head) {
Stack<Integer> stack = new Stack<>();
while (head != null) {
stack.push(head.val);
head = head.next;
}
int arr[] = new int[stack.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = stack.pop();
}
return arr;
}
递归。时间复杂度O(N),空间复杂度O(N)。