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

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

题目:

https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/

题解:

一说到链表题,我们第一就会想到迭代算法和递归算法,但是看下本题的要求,是从尾到头打印链表,就不需要搞一个新的链表,所以迭代算法可以先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》——合并两个排序的链表
|
3月前
剑指 Offer 35:复杂链表的复制
剑指 Offer 35:复杂链表的复制
24 0
|
1月前
《剑指offer》——从尾到头打印链表
《剑指offer》——从尾到头打印链表
|
3月前
剑指 Offer 52:两个链表的第一个公共节点
剑指 Offer 52:两个链表的第一个公共节点
14 0
|
3月前
剑指 Offer 36:二叉搜索树与双向链表
剑指 Offer 36:二叉搜索树与双向链表
18 0
|
3月前
剑指 Offer 25:合并两个排序的链表
剑指 Offer 25:合并两个排序的链表
24 1
|
3月前
剑指 Offer 24:反转链表
剑指 Offer 24:反转链表
16 1
|
3月前
剑指 Offer 22:链表中倒数第k个节点
剑指 Offer 22:链表中倒数第k个节点
20 1
|
3月前
剑指 Offer 18:删除链表的节点
剑指 Offer 18:删除链表的节点
22 0
|
3月前
剑指 Offer 06:从尾到头打印链表
剑指 Offer 06:从尾到头打印链表
16 0