题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
解题方案: 统计节点数量,倒序插入元素
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reversePrint(head *ListNode) []int {
p := head //工作指针
n := 0
//统计节点数目
for p != nil {
p = p.Next
}
// 开辟切片空间
arr := make([]int, n)
//工作指针复位
p = head
//第二次遍历链表,存入数组
for i := n - 1; i >= 0; i-- {
arr[i] = p.Val
p = p.Next
}
return arr
}
解决方案: 递归
:::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)
}