/
PrintListFromTailToHead.go
63 lines (54 loc) · 1.22 KB
/
PrintListFromTailToHead.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* @author yang
* @version 0.1 20180721
* Created by yang on 2017/07/21.
************************************************************************************************
* 输入一个链表,从尾到头打印链表每个节点的值。
************************************************************************************************
*/
package AtOffer
import (
"strconv"
)
type ListNode struct {
Val int
Next *ListNode
}
func (l *ListNode) String() string {
if nil == l {
return "nil"
}
return strconv.Itoa(l.Val) + "->" + l.Next.String()
}
func PrintListFromTailToHead(list *ListNode) []int {
reversedList, _ := reverseList(list)
var res []int
node := reversedList
for nil != node {
res = append(res, node.Val)
node = node.Next
}
return res
}
func reverseList(head *ListNode) (reversedHead *ListNode, length int) {
if nil == head || nil == head.Next {
length = 0
if nil != head {
length = 1
}
return head, length
}
currNode, length := head, 0
var prevNode, nextNode *ListNode
for nil != currNode {
length++
nextNode = currNode.Next
if nil != nextNode {
reversedHead = nextNode
}
currNode.Next = prevNode
prevNode = currNode
currNode = nextNode
}
return reversedHead, length
}