《剑指offer》之从“尾到头打印链表”题解

简介: 《剑指offer》之从“尾到头打印链表”题解

题目:

leetcode-cn.com/problems/co…

题解:

一说到链表题,我们第一就会想到迭代算法和递归算法,但是看下本题的要求,是从尾到头打印链表,就不需要搞一个新的链表,所以迭代算法可以先pass掉,因此我们优先考虑递归,可以不断寻找链表的Next,直到Next为null,然后不断向上返回值。

图解:

网络异常,图片无法展示
|


代码:

链表类:

static class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
    }
}
复制代码

算法:

public class Solution {
    /**
     * 临时数组
     */
    ArrayList<Integer> tmp = new ArrayList<>();
    public int[] reversePrint(ListNode head) {
        //先进行递归
        recur(head);
        int[] res = new int[tmp.size()];
        //将List的值传给int数组
        for (int i = 0; i < res.length; i++) {
            res[i] = tmp.get(i);
        }
        return res;
    }
    /**
     * 递归方法
     *
     * @param head
     */
    public void recur(ListNode head) {
        //递归的终止条件
        if (head == null) {
            return;
        }
        //进行递归
        recur(head.next);
        tmp.add(head.val);
    }
}
复制代码

测试:

public static void main(String[] args) {
    ListNode listNode = new ListNode(1);
    listNode.next = new ListNode(3);
    listNode.next.next = new ListNode(2);
    Solution solution = new Solution();
    int[] ints = solution.reversePrint(listNode);
    for (int i : ints) {
        System.out.println(i);
    }
}


相关文章
|
1月前
《剑指offer》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
1月前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
15 1
|
1月前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
19 1
|
1月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
1月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
1月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
1月前
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
|
1月前
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
|
1月前
剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点
28 0
|
1月前
剑指Offer06.从尾到头打印链表
剑指Offer06.从尾到头打印链表
27 0