如何在链接的循环列表中链接不同但相似的结构?

问题描述 投票:0回答:1

我正在尝试实现 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 结构使用接口,但编译器不喜欢那样。除此之外,我还没有找到解决方案的好主意。更糟糕的情况,我必须使列表中的每个结构都具有相同的类型。

编程新手,任何建议将不胜感激。

algorithm go pointers circular-list knuth
1个回答
0
投票

首先,指向接口的指针(如

*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

© www.soinside.com 2019 - 2024. All rights reserved.