1 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
2 // 定义一个ArrayList,用来存放翻转链表结果
3 ArrayList<Integer> list = new ArrayList<>();
4 if (listNode == null) {
5 return list;
6 }
7 ListNode p = listNode;//p指向头指针
8 // 1、每次迭代一个p,就把p的数值加入到list当中
9 // 2、循环结束的时候,list里面存放的内容是链表的顺序排列
10 while (p != null) {
11 list.add(p.val);
12 p = p.next;
13 }
14 int length = list.size();
15 // 用i指向list的最前面,用j指向list的最后面
16 int i = 0, j = length - 1;
17 // 1、将i指向的内容与j指向的内容进行交换
18 // 2、循环结束之后,list里面的内容就翻转过来了
19 while (i < j) {
20 int temp = list.get(i);
21 list.set(i, list.get(j));
22 list.set(j, temp);
23 i++;
24 j--;
25 }
26 // 返回最终结果,list里面的内容已经翻转过来了
27 return list;
28 }
1 public class ListNode {
2 int val;
3 ListNode next = null;
4
5 ListNode(int val) {
6 this.val = val;
7 }
8 }