輸入一個鏈表的頭節點,從尾到頭反過來返回每一個節點的值(用數組返回)。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(); }