时间复杂度空间复杂度都是O(N)
1.我怎么就想不到用栈呢。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
LinkedList<Integer> stack=new LinkedList<>();
int count=0;
while(head!=null){
stack.addLast(head.val);
count++;
head=head.next;
}
int[] res=new int[count];
for(int i=0;i<count;i++){
res[i]=stack.removeLast();
}
return res;
}
}
2.
开的数组太大了,不好。
代码
class Solution {
public int[] reversePrint(ListNode head) {
//存放遍历链表得到的数的数组
int[] result=new int[10001];
int i=10000;
while(head!=null){
result[i--]=head.val;
head=head.next;
}
//要输出的数组
int[] res=new int[10000-i];
System.arraycopy(result, i+1, res, 0, 10000-i);
return res;
}
}
结果
总结
看了官方题解,是先用栈存放链表元素,因为栈具有先进后出的特点。