1.题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
2.代码
方法一:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
//定义一个集合储存链表里的值
List<Integer> list = new ArrayList<>();
while(head!=null){
list.add(head.val);
head = head.next;
}
//把集合里的值倒着存到数组里面
int[] arr = new int[list.size()];
for(int i=0; i<list.size(); i++){
arr[i] = list.get(list.size()-1-i);
}
return arr;
}
}
方法二:递归
/**标签:head,06,val,int,list,pffer,arr,链表,ListNode From: https://blog.51cto.com/u_15806469/6024996
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
//定义一个集合,给递归的时候存进去
List<Integer> list = new ArrayList<>();
public int[] reversePrint(ListNode head) {
recur(head);//这个步骤完成之后,就把链表里的全部值都添加成功了
//再把集合的元素倒着添加进去
int[] arr = new int[list.size()];
for(int i=0; i<list.size(); i++){
arr[i] = list.get(list.size()-1-i);
}
return arr;
}
void recur(ListNode head){
if(head==null){//递归的出口
return;
}
list.add(head.val);//把当前的值添加到集合中
recur(head.next);//递归,下一个值,移动指针
}
}