一、题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
二、运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/80f4f8e51ac8a0c79b90e6ee1be4d83d.png)
三、解题思路
方法一:首先从头到尾遍历一次链表,统计链表中结点的格式,然后创建一个和链表结点个数等大的数组;
再次从头到尾遍历链表,将链表中每个结点的值从后往前填入结果数组中。
方法二:先遍历一次链表改变每个结点的指针指向(倒置链表),然后再从后往前遍历链表,得到的就是从尾到头的打印结果。
四、AC代码
/**
* 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 count = 0; //链表结点的个数
ListNode p = head;
while(p != null){ //统计链表中结点的个数
count++;
p = p.next;
}
int[] ans = new int[count]; //创建一个和结点个数等大的数组
p = head;
int index = count - 1; //作为索引填充数组(从后往前填充)
while(p != null){
ans[index] = p.val;
p = p.next;
index--;
}
return ans;
}
}