输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 输入:head = [1,3,2] 输出:[2,3,1] 说实话,这个题目还是比较简单的,但是我个人感觉其实还是有点小技巧在里面,看到官方题解以及许多大佬们的解法都是使用了栈或者递归。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public int[] reversePrint(ListNode head) { //利用栈的先进后出特性 Stack<Integer> stack = new Stack(); //记录链表的长度 int len = 0; while(head != null){ stack.push(head.val); len++; head = head.next; } int[] arr = new int[len]; for(int i=0;i<len;i++){ arr[i] = stack.pop(); } return arr; } } 但是这里我的解法是,先遍历整个链表,获取到链表的长度,然后再创建数组,从数组的最后一位开始赋值; class Solution { public int[] reversePrint(ListNode head) { ListNode node = head; int len = 0; while(node != null){ len++; node = node.next; } int[] arr = new int[len]; //这边从数组的最后一位开始赋值,也算是一种常规的方法吧 for(int i=len-1;i>=0;i--){ arr[i] = head.val; head = head.next; } return arr; } }