【d48】【Java】【力扣】LCR 123. 图书整理 I

思路

方法1:放进list,将list倒置,利用stream,将list改为int类型

方法2:递归:递归通用思路;明确每一层做什么+确定返回值+确定什么地方接收下层的返回值

每一层:调用下层,然后把自己放进数组,把数组返回给上层
确定返回值:返回本层添加后的list,确定调用下层的时候接收,

代码

方法1

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public int[] reverseBookList(ListNode head) {
           //遍历把所有节点放进list
            ListNode cur=head;
            ArrayList<Integer> list = new ArrayList<>();
            while(cur!=null){
                list.add(cur.val);
                cur=cur.next;
            }
            //倒置这个
            Collections.reverse(list);
            //把list放进int[]
            int[] array = list.stream().mapToInt(Integer::intValue).toArray();
            return array;
    }
}

方法2

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public int[] reverseBookList(ListNode head) {
        if (head==null){
                return new int[0];
            }
            //递归:每一层做法:调用下层 ,然后把自己放进数组
            //头节点调用递归方法
            ArrayList<Integer> list = new ArrayList<>();
            list = diGui(head, list);
            int[] array = list.stream().mapToInt(Integer::intValue).toArray();
            return array;
        }
        //递归:调用下层,然后把自己放进数组,把数组返回给上层
        //确定返回值,确定调用下层的时候接收,
        public ArrayList<Integer> diGui (ListNode cur,ArrayList<Integer> list){
            if (cur.next!=null){
                list=diGui(cur.next,list);
            }
            list.add(cur.val);
            return list;
        }
    }

记录

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值