我理解如何创建没有循环的链接列表,但我很难将常规列表转换为链接列表。
def addtoHead(theList, value):
#create a new node
node={}
node['data'] = value
node['next'] = theList #connect the new node to the current head
return node #returning the new node as the head of the list
myList=None
myList=addtoHead(myList,7)
myList=addtoHead(myList,9)
myList=addtoHead(myList,10)
def printList(theList):
ptr=theList
while ptr!=None:
print(ptr['data'])
ptr=ptr['next']
现在,我想做同样的事情,除了循环,但我很难得到逻辑。
def createList(pythonList):
node={}
head=None
for i in range(len(pythonList)):
node['data'] = pythonList[i]
node['next'] = head
head=pythonList[i]
printList(node)
pythonList=[7,12,14]
createList(pythonList)
我的逻辑是我将数据设置为列表的元素,然后我将该数据类型连接到头部。然后我将头重置为数据,然后继续。不幸的是,这打印14,然后我得到错误:
TypeError: 'int' object is not subscriptable
此错误适用于打印(ptr [' data'])。我哪里出错?
答案 0 :(得分:1)
需要进行微小的改动。您需要在循环中声明一个新节点 。
def createList(pythonList):
head = None
for i in pythonList:
new_node = {}
new_node['data'] = i
new_node['next'] = head
head = new_node
在循环结束时,将head指定给创建的新节点。在下一次迭代中,下一个新节点将引用head。
目前,您所做的不是更改头指向正确的引用(在第一次迭代后将其指向一个整数),从而产生该错误。
在循环外,运行:
printList(head)
print(head)
它看起来像这样:
14
12
7
{'data': 14, 'next': {'data': 12, 'next': {'data': 7, 'next': None}}}
这正是你的sans循环代码所做的。
答案 1 :(得分:0)
因此,您需要在代码中进行2次更正 1.您需要为每个循环制作新节点 2.头应该是你做的新节点。
def printList(theList):
ptr=theList
while ptr!=None:
print(ptr['data'])
ptr=ptr['next']
def createList(pythonList):
head=None
for i in range(len(pythonList)):
node={}
node['data'] = pythonList[i]
node['next'] = head
head = node
printList(node)
pythonList=[7,12,14]
createList(pythonList)
结果将是
14
12
7