输入一个链表的头节点,从尾到头反过来返回每一个节点的值(用数组返回)。golang
示例 1:数组
输入:head = [1,3,2] 输出:[2,3,1]
1.借助一个数组tmp暂存链表中的数据,再将tmp数组中的值翻转
时间复杂度:遍历了链表,因此为O(n)
空间复杂度:借助了临时数组tmp,因此为O(n)app
func reversePrint(head *ListNode) []int { var tmp = []int{} cur := head for cur != nil { tmp = append(tmp, cur.Val) cur = cur.Next } //翻转数组 for i, j := 0, len(tmp)-1; i < j; i,j=i+1,j-1{ tmp[i], tmp[j] = tmp[j], tmp[i] } return tmp }
2.在1中还须要翻转数组,能不能直接将从链表遍历的值从最后一位开始往前存放呢?先放入的最后取,这不就是
栈
的特性吗,而后将栈中的数据存入结果数组中。这里面用到了container/list
包函数func (l *List) PushFront(v interface{}) *Element
PushFront函数
将一个值为v的新元素插入链表的第一个位置,返回生成的新元素。codefunc (l *List) Front() *Element
Front函数
返回链表第一个元素或nil。ip
func reversePrint(head *ListNode) []int { //建立一个新的链表 l := list.New() for head != nil { //PushFront将一个值为v的新元素插入链表的第一个位置,返回生成的新元素。 l.PushFront(head.Val) head = head.Next } result := []int{} //Front返回链表的第一个元素或者nil for e := l.Front(); e != nil; e = e.Next() { result = append(result, e.Value.(int)) } return result }
1.使用js的库函数
unshift
直接追加元素到数组的首部leetcode
unshift()
在数组开头添加一个或多个元素,并返回数组的新长度。get
/*1.使用js的库函数,unshift追加元素到达数组的首部*/ var reversePrint = function(head) { let array = []; let cur = head; while(cur !== null){ array.unshift(cur.val); cur = cur.next; }; return array; };
2.借助一个数组tmp暂存链表中的数据,再将tmp数组中的值翻转(js的库函数
reverse
)io
/*2.借助一个数组tmp暂存链表中的数据,再将tmp数组中的值翻转(js的库函数`reverse`) */ var reversePrint = function(head){ let array = []; let cur = head; while(cur !== null){ array.push(cur.val) cur = cur.next }; return array.reverse(); }