从尾到头打印链表。
需要一个有顺序的数组去接收链表
这里我们用ArrayList
ArrayList<Integer>() aa=new ArrayList<>(); //设置ArrayList为Integer型
写一个aa去接收从链表尾的方法,接收参数是链表型ListNode head
void wei(ListNode head){
if(head==null){
return ;
}else{
wei(head.Next); //这里用递归,从链表尾数先加上
aa.add(head.val);//head.val是当前值
}
}
//比如(1,2,3)的链表,
会先用1.Next=2调用进去,//生成二楼,会调入2.next=3,并有一个aa.add(2.val),在一楼aa.add(1.val)方法前
//二楼调用2.next=3时,//生成三楼,会调入3.Next=null,并有一个aa.add(3.val),
在二楼aa.add(2.val)方法前,
//然后又调入3.Next=null时,//生成四楼,此时调入为空,在aa.add(3.val)方法前,
//四楼里的方法返回为空,结束,往楼下执行
//执行aa.add.(3.val),再往后
//执行aa.add.(2.val),再往后
//执行aa.add.(1.val),在一楼,aa.add.(1.val)后没有方法了,结束
//这时候aa={3,2,1},接收到了从尾到头的链表
先用aa用wei方法接收链表
wei(head);
创建结果返回的数组,长度为aa的长度
int [] rr=new int[aa.size()];
把aa一个一个传入rr数组
for(int i=0;i<rr.length;++i){
rr[i]=aa.get(i);
最后返回rr
return rr;
力扣上的代码为
class Solution {
ArrayList<Integer> aa=new ArrayList<>();
public int[] reversePrint(ListNode head) {
wei(head);
int [] rr=new int[aa.size()];
for(int i=0;i<rr.length;++i){
rr[i]=aa.get(i);
}
return rr;
}
void wei(ListNode head){
if(head==null){
return ;
}else{
wei(head.next);
aa.add(head.val);
}
}
}