一、题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
二、题目分析
个人思路:
法一:遍历链表将值暂存在数组中,由于顺序原因需要进行反转。
法二:遍历链表将值暂存在数组中,存储时就将顺序进行反序存储。
三、golang代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
//法一
func reversePrint(head *ListNode) []int {
var result []int
//遍历存储val至数组
for head != nil {
result = append(result, head.Val)
head = head.Next
}
//首尾交换位置,相当于反转后输出
for i := 0; i < len(result)/2; i++ {
temp := result[i]
result[i] = result[len(result)-1-i]
result[len(result)-1-i] = temp
}
return result
}
//法二
func reversePrint(head *ListNode) []int {
var result []int
//存储同时将顺序进行调整
for head != nil {
result = append([]int{head.Val}, result...)
head = head.Next
}
return result
}}
四、运行结果
法一:性能良好
执行用时 :0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗 :3.1 MB, 在所有 Go 提交中击败了100.00%的用户
法二:性能不佳
执行用时 :56 ms, 在所有 Go 提交中击败了8.44%的用户
内存消耗 :9.8 MB, 在所有 Go 提交中击败了100.00%的用户
题目链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/
想法不够优化,欢迎大家留言交流~