在为我的决赛练习时,我遇到了旋转链表的问题。因此,如果链接列表为[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
答案 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。
如果您需要为教育目的重新实施链接列表,还有其他方法。