/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void reverse(int[] res) {
int j = res.length - 1;
int i = 0;
while (i < j) {
int temp = res[i];
res[i] = res[j];
res[j] = temp;
i++;
j--;
}
}
public int[] reversePrint(ListNode head) {
int len = 0;
ListNode start = head;
while (start != null) {
len++;
start = start.next;
}
int[] res = new int[len];
int index = 0;
while (head != null) {
res[index++] = head.val;
head = head.next;
}
reverse(res);
return res;
}
}
递归:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void digui(ListNode head, ArrayList<Integer> res) {
if (head == null) {
return;
}
digui(head.next, res);
res.add(head.val);
}
public int[] reversePrint(ListNode head) {
ArrayList<Integer> res = new ArrayList<Integer>();
digui(head, res);
return res.stream().mapToInt(Integer::valueOf).toArray();
}
}
注意怎么将 ArrayList 转化成 int[] 数组
头插法:
/**
* 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];
}
ListNode p = head.next;
head.next = null;
int len = 1;
while (p != null) {
ListNode q = p.next;
p.next = head;
head = p;
p = q;
len++;
}
int[] res = new int[len];
int index = 0;
while (head != null) {
res[index++] = head.val;
head = head.next;
}
return res;
}
}
栈:
/**
* 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<Integer>();
int len = 0;
while (head != null) {
stack.push(head.val);
head = head.next;
len++;
}
int[] res = new int[len];a
int index = 0;
while (!stack.isEmpty()) {
res[index++] = stack.pop();
}
return res;
}
}