目录
描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入: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) {
ListNode node = traverse(head);
LinkedList<Integer> list = new LinkedList<>();
ListNode temp = node;
while(temp!=null){
list.add(temp.val);
temp = temp.next;
}
int[] res = new int[list.size()];
// int index = 0;
// while(!list.isEmpty()){
// res[index] = list.removeFirst();
// index++;
// }
for(int i = 0; i < list.size(); i++){
res[i] = list.get(i);
}
return res;
}
public ListNode traverse(ListNode head){
if(head == null || head.next == null) return head;
ListNode temp = traverse(head.next);
head.next.next = head;
head.next = null;
return temp;
}
//方法二 栈
// class Solution {
// public int[] reversePrint(ListNode head) {
// LinkedList<Integer> stack = new LinkedList<Integer>();
// while(head != null) {
// stack.addLast(head.val);
// head = head.next;
// }
// int[] res = new int[stack.size()];
// for(int i = 0; i < res.length; i++)
// res[i] = stack.removeLast();
// return res;
// }
// }
}