下面是代码:
package collection
type List struct {
head *Node
tail *Node
}
func (l *List) First() *Node {
return l.head
}
func (l *List) Push(value int) {
node := &Node{value: value}
if l.head == nil { // list is empty
l.head = node
} else {
l.tail.next = node
}
l.tail = node
}
func (l *List) String() string {
var list string
n := l.First()
for n != nil {
list = list + string(n.Value()) + " "
n = n.Next()
}
return list
}
type Node struct {
value int
next *Node
}
func (n *Node) Next() *Node {
return n.next
}
func (n *Node) Value() int {
return n.value
}
在调试时,元素被成功推送
但是对于list = list + string(n.Value()) + " "
,这是调试输出:list: " "
package main
import (
"fmt"
"github.com/myhub/cs61a/collection"
)
func main() {
l := &collection.List{}
l.Push(1)
l.Push(2)
l.Push(3)
fmt.Println(l)
}
1(为什么list = list + string(n.Value()) + " "
不连接整数?
2( 如何支持任何类型的会员value
的Node
?
使用strconv.Itoa()
将 int 转换为字符串。
list = list + strconv.Itoa(n.Value()) + " "
在普通转换中,该值被解释为 Unicode 代码点,生成的字符串将包含该代码点表示的字符,以 UTF-8 编码。
s := string(97) // s == "a"
对于您的情况,1,2,3 都是不可打印的字符