考察知识:链表

描述

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:
(JZ6) 从尾到头打印链表 - 图1
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000

示例1

输入:{1,2,3}
返回值:[3,2,1]

示例2

输入:{67,0,24,58}
返回值:[58,24,0,67]

代码实现

  1. import java.util.Stack;
  2. /**
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next = null;
  6. *
  7. * ListNode(int val) {
  8. * this.val = val;
  9. * }
  10. * }
  11. *
  12. */
  13. import java.util.ArrayList;
  14. public class Solution {
  15. public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
  16. // 压栈
  17. Stack<ListNode> stk = new Stack<ListNode>();
  18. ListNode temp = listNode;
  19. while(temp != null) {
  20. stk.push(temp);
  21. temp = temp.next;
  22. }
  23. int size = stk.size();
  24. ArrayList<Integer> arr = new ArrayList<>(size);
  25. for (int i = 0; i < size; i++) {
  26. arr.add(i, stk.pop().val);
  27. }
  28. return arr;
  29. //从后往前赋值
  30. // ListNode temp = listNode;
  31. // int count = 0;
  32. // while (temp != null) {
  33. // count++;
  34. // temp = temp.next;
  35. // }
  36. // temp = listNode;
  37. // ArrayList<Integer> arr = new ArrayList<>(count);
  38. // for (int i = count -1; i >= 0; i--) {
  39. // arr.add(i, temp.value);
  40. // temp = temp.next;
  41. // }
  42. // return arr;
  43. }
  44. }