题目logo-dark-cn.c42314a8.svg

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:

输入:head = [1,3,2] 输出:[2,3,1]

限制:

0 <= 链表长度 <= 10000

解题方案: 统计节点数量,倒序插入元素

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func reversePrint(head *ListNode) []int {
  9. p := head //工作指针
  10. n := 0
  11. //统计节点数目
  12. for p != nil {
  13. p = p.Next
  14. }
  15. // 开辟切片空间
  16. arr := make([]int, n)
  17. //工作指针复位
  18. p = head
  19. //第二次遍历链表,存入数组
  20. for i := n - 1; i >= 0; i-- {
  21. arr[i] = p.Val
  22. p = p.Next
  23. }
  24. return arr
  25. }

解决方案: 递归

:::tips 递归的方法简单,但是开销大,不推荐在开发过程中使用 :::

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reversePrint(head *ListNode) []int {
     if head == nil {
        return []int{}
    }
    return append(reversePrint(head.Next),head.Val)
}