我正在尝试实现 Knuth 的算法 X,但我在生成链表时遇到了问题。我的列标题和数据点是不同的类型,但构建相似。
type ListObject interface{}
type Data struct {
L, R, U, D, C *ListObject
}
type Column struct {
L, R, U, D, C *ListObject
Size int
Name string
}
这是我遇到问题的 WIP 代码:
func CreateLinkedList(sparceMatrix [][]int) Column {
masterHeader := new(Column)
currentHeader := masterHeader
for i, col := range sparceMatrix[0] {
}
currentHeader.R = masterHeader
return masterHeader
}
编译器不喜欢的位是 currentHeader.R = masterHeader 位。
Data结构中的变量是相邻的dada结构(Left,Right),但U(p)和D(own)也可以是Column对象。
如您所见,我考虑过为 ListObject 结构使用接口,但编译器不喜欢那样。除此之外,我还没有找到解决方案的好主意。更糟糕的情况,我必须使列表中的每个结构都具有相同的类型。
编程新手,任何建议将不胜感激。
首先,指向接口的指针(如
*ListObject
)几乎不是你想要的。这就是你错误cannot use masterHeader (variable of type *Column) as *ListObject value in assignment: *Column does not implement *ListObject (type *ListObject is pointer to interface, not interface)
的原因。将*ListObject
的每个实例更改为ListObject
,一切都会进行得更顺利。
另一个错误是
cannot use masterHeader (variable of type *Column) as Column value in return statement
,正如它所说的那样;你正在创建一个*Column
(指向列的指针),但是你的函数签名说你正在返回一个Column
。可能您想更改函数签名以在此处返回*Column
。