我有一个由NODE_
制作的链接列表。这些节点实际上并不指向其他节点,而是指向NODELINK_
的链接列表,它们存储连接的节点。
这允许形成不规则图形,例如:
N------N---------N-------N
/ \ | \
/ \ N---N-----N
/ \ | \ |
N-------N-----N N---N
你明白了。非常动态的数据。典型节点可能如下所示:
NOODE_1 -> NODELINK_1 -> NODELINK_2 -> NODELINK_3 -> NULL
| | |
V V V
NODE2_ NODE3_ NODE4_
在遍历这样的图表时会出现问题。绕过图表是很容易的,但是我怎么能确保我没有发现自己在图形中穿过一个循环(注意:假设头部将成为这个循环的一部分是不安全的,所以你的典型的“循环链表遍历”算法不会在此处删除它,如何确定何时处理节点?
我唯一能想到的就是在每个节点中设置一个标志,表明它已经被处理过了。这看起来有点像hackjob,但我想不出任何其他方式来做我认为合理的方法。我错了吗?还有更好的方法吗?
答案 0 :(得分:3)
我能想到的另一种方法是保留一个数据结构,例如Dictionary
来列出您已经访问过的节点,并在访问您已经访问的节点之前测试成员资格参观。这样可以避免在节点中创建额外的字段。
答案 1 :(得分:3)
你正在做Graph traversal。
为每个节点设置visited
标志绝对是一种常见的方法,例如维基百科上的Breadth-first search和Depth-first search算法mark
访问过的节点。