Bootstrap

剑指offer003-从尾到头打印链表

1.题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

 

示例 1:

输入:head = [1,3,2]
输出:[2,3,1]
 

限制:

0 <= 链表长度 <= 10000
2.分析
  • 首先遍历一遍链表获取链表长度,不然不知道要返回的数组长度是多少,也没法创建。
  • 第二次遍历链表取值,从数组后面一个个放入。
3.我的代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        int size = 0;
        ListNode node = head;
        // 遍历链表,获取链表长度
        while(node != null) {
            size++;
            node = node.next;
        }
        // 创建链表长度的数组
        int[] res = new int[size];
        int position = res.length - 1;
        node = head;
        // 再次遍历链表取value
        while(node != null) {
            res[position] = node.val;
            position--;
            node = node.next;
        }
        return res;
    }
}
4.题解代码
class Solution {
    ArrayList<Integer> tmp = new ArrayList<Integer>();
    public int[] reversePrint(ListNode head) {
        recur(head);
        int[] res = new int[tmp.size()];
        for(int i = 0; i < res.length; i++)
            res[i] = tmp.get(i);
        return res;
    }
    void recur(ListNode head) {
        if(head == null) return;
        recur(head.next);
        tmp.add(head.val);
    }
}
;