输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
方法1:栈,将链表入栈后出栈即可实现反转链表
public class Sword_06 {
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
ListNode l2 = new ListNode(3);
ListNode l3 = new ListNode(2);
l1.next = l2;
l2.next = l3;
System.out.println(l1.val);
Sword_06 s6 = new Sword_06();
int[] ints = s6.reversePrint(l1);
for (int i = 0;i < ints.length;i++){
System.out.println(ints[i]);
}
}
public int[] reversePrint(ListNode head) {
Stack<ListNode> stack = new Stack<>();
ListNode temp = head;
while (temp != null){
stack.push(temp);
temp = temp.next;
}
int[] arr = new int[stack.size()];
for (int i = 0;i < arr.length;i++){
ListNode pop = stack.pop();
arr[i] = pop.val;
}
return arr;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
这里在写出栈循环时候出现了一点错误,循环条件一开始写成了stack.size(),忽略了出站后size减少的问题,所以一直不对。
时间空间复杂度都是O(n);