• 描述

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

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

 

  • 限制:
0 <= 链表长度 <= 10000
  • Solution One

Stack FILO

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        if (head == null){
            return new int[0];
        }
        Stack<Integer> stack = new Stack<>();
        while (head != null){
            stack.push(head.val);
            head = head.next;
        }
        int[] res = new int[stack.size()];
        for (int i = 0; i < res.length; ++i){
            res[i] = stack.pop();
        }
        return res;
    }
}
  • Solution Two

经典回溯

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
   int[] res;
    int i;
    public int[] reversePrint(ListNode head) {
       recur(head,0);
       return res;
    }
    public void recur(ListNode node, int count){
	if(node == null){
	   res = new int[i];
	   i--;
	   return;
	}
	i++;
	recur(node.next,i);
	res[i - count] = node.val;
    }
}