如何找到最长和最短的链表?

时间:2016-07-04 16:02:27

标签: algorithm list data-structures

考虑以下形状,它是一组项目的表示,而不是一个形状。

我有一个N个元素的列表,在本例中为10。

每个元素都具有以下属性:

  • ID(红色数字)
  • 一对表示' 来自'和' ',值为StringInteger(在括号中)。他们不是指向其他对象的指针。
  • 指向上一个元素的指针(默认值为null
  • 指向下一个元素的指针(默认值为null

*暂时忽略蓝线。

enter image description here

这就是我将指针分配给每个元素的previousnext对象的方法:

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)

链表是否有助于我更轻松地实现这一目标?

是否有任何其他数据结构可以帮助我更有效地解决这个问题?

0 个答案:

没有答案