考虑以下形状,它是一组项目的表示,而不是一个形状。
我有一个N个元素的列表,在本例中为10。
每个元素都具有以下属性:
String
或Integer
(在括号中)。他们不是指向其他对象的指针。null
)null
)*暂时忽略蓝线。
这就是我将指针分配给每个元素的previous
和next
对象的方法:
item1 = { 'id': 1, 'from': 'a', 'to': 'b', 'prev': None, 'next': None}
item2 = { 'id': 2, 'from': 'b', 'to': 'c', 'prev': None, 'next': None}
item3 = { 'id': 3, 'from': 'c', 'to': 'd', 'prev': None, 'next': None}
item4 = { 'id': 4, 'from': 'd', 'to': 'e', 'prev': None, 'next': None}
item5 = { 'id': 5, 'from': 'e', 'to': 'f', 'prev': None, 'next': None}
item6 = { 'id': 6, 'from': 'f', 'to': 'a', 'prev': None, 'next': None}
item7 = { 'id': 7, 'from': 'f', 'to': 'g', 'prev': None, 'next': None}
item8 = { 'id': 8, 'from': 'g', 'to': 'h', 'prev': None, 'next': None}
item9 = { 'id': 9, 'from': 'h', 'to': 'i', 'prev': None, 'next': None}
item10 = { 'id': 10, 'from': 'i', 'to': 'a', 'prev': None, 'next': None}
items = [item1, item2, item3, item4, item5, item6, item7, item8, item9, item10]
for p1 in items:
for p2 in items:
if p1['to'] == p2['from']:
p1['next'] = p2['id']
p2['prev'] = p1['id']
执行上一个代码,我的项目集合变为(我认为这是一个双链表):
items = [
{'id': 1, 'from': 'a', 'to': 'b','prev': 10,'next': 2},
{'id': 2, 'from': 'b', 'to': 'c','prev': 1,'next': 3},
{'id': 3, 'from': 'c', 'to': 'd','prev': 2,'next': 4},
{'id': 4, 'from': 'd', 'to': 'e','prev': 3,'next': 5},
{'id': 5, 'from': 'e', 'to': 'f','prev': 4,'next': 7},
{'id': 6, 'from': 'f', 'to': 'a','prev': 5,'next': 1},
{'id': 7, 'from': 'f', 'to': 'g','prev': 5,'next': 8},
{'id': 8, 'from': 'g', 'to': 'h','prev': 7,'next': 9},
{'id': 9, 'from': 'h', 'to': 'i','prev': 8,'next': 10},
{'id': 10, 'from': 'i', 'to': 'a','prev': 9,'next': 1}
]
如何找到从1到6然后再回到1的(最短)列表?也就是说,上面形状的蓝线,这个:
1 (a,b)
2 (b,c)
3 (c,d)
4 (d,e)
5 (e,f)
6 (f,a)
如何找到(最长)列表从1到5,然后到7到10,然后再回到1?就是这样:
1 (a,b)
2 (b,c)
3 (c,d)
4 (d,e)
5 (e,f)
7 (f,g)
8 (g,h)
9 (h,i)
10 (i,a)
链表是否有助于我更轻松地实现这一目标?
是否有任何其他数据结构可以帮助我更有效地解决这个问题?