无法理解Python中的链接列表

时间:2017-07-13 16:11:53

标签: python list typeerror

我理解如何创建没有循环的链接列表,但我很难将常规列表转换为链接列表。

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'])。我哪里出错?

2 个答案:

答案 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