旋转链表

时间:2015-12-12 21:02:37

标签: python list rotation

在为我的决赛练习时,我遇到了旋转链表的问题。因此,如果链接列表为[3,6,2,7],则在通话后将为[6,2,7,3]。然而,在编码时,我设法意外地将其反转。任何人都可以看到我的错误,并可能指出我正确的方向。我的代码运行后,我得到[7,2,6,3]。另外,正如您所看到的,我必须将链表实现为dictionarys

def rotateLinkedList(lis):
    ptr = lis
    temp = ptr['data']
    while ptr['next'] == None:
        temp = ptr['data']['next']
        ptr = ptr['next']
    return lis

1 个答案:

答案 0 :(得分:0)

要旋转列表,您不需要重新实现链接列表,并且可以使用它。因此,对于旋转,您可以使用标准FIFO方法:https://docs.python.org/2/tutorial/datastructures.html#using-lists-as-queues

并将删除的项目附加到列表的末尾。

您也可以使用:

l = [3,6,2,7]
rotated = l.append(l.pop(0))

顺便说一下,CPython中的列表是作为指针数组实现的。很好的见解在这里:https://www.quora.com/How-are-Python-lists-implemented-internally和这里:http://www.laurentluce.com/posts/python-list-implementation/

实现链表作为数据结构的水平相当低。因为你通常可以通过Python中的其他方法获得类似的结果 - list,deque。

如果您需要为教育目的重新实施链接列表,还有其他方法。

相关问题