创建python链表时遇到问题

创建python链表时遇到问题,python,linked-list,nodes,Python,Linked List,Nodes,这就是我现在正在使用的代码,我正在尝试完成insertNodelist,index,value函数一个通用的插入函数,它将节点插入一个空列表[@head of a list/tail/middle] insertNode函数应该使用index参数来指示在列表中插入新节点的位置,并且应该返回修改后的列表的头部 我已经为此工作了好几天,我不确定这是语法还是我的理解,代码似乎不起作用。请帮忙 另外,如果我想将nthNode的返回值(例如ptr)用于另一个函数,那么将其设置为全局值是否正确 global

这就是我现在正在使用的代码,我正在尝试完成insertNodelist,index,value函数一个通用的插入函数,它将节点插入一个空列表[@head of a list/tail/middle]

insertNode函数应该使用index参数来指示在列表中插入新节点的位置,并且应该返回修改后的列表的头部

我已经为此工作了好几天,我不确定这是语法还是我的理解,代码似乎不起作用。请帮忙

另外,如果我想将nthNode的返回值(例如ptr)用于另一个函数,那么将其设置为全局值是否正确

global ptr

def createList(plist):
    """
    Creates and returns a linked list containing all of the elements
    of the Python-style list parameter.  A useful shortcut for testing.
    """
    linkedList = None
    # goes backwards, adding each element to the beginning
    # of the list.  
    for index in range(len(plist)-1, -1, -1):
        linkedList = insertValueHead(linkedList, plist[index])
    return linkedList


def emptyList():
  #creates an empty linked list
  return None   #absence of a value -- nothing


def insertValueHead(linkedList, value):
    #linkedList is the head of the list to be added to
    #value is the data to be stored in the node
    #inserts a new value at the head of the linked list
    newnode = {}
    newnode["data"] = value
    #set the next pointer of this new node to the head of the list, linkedList
    #newnode is now the head of the list 
    newnode["next"] = linkedList
    return newnode


def nthNode(linkedList, n):
    """
    Helper method: returns a reference to node n in a list
    (counting from zero).
    Parameters: the list and an index n
    If there is no node n, returns None.
    """

    ptr = linkedList
    count = 0
    if n < 0:
        return None

    while ptr != None and count < n:
        ptr = ptr['next']
        count += 1
    return ptr


def insertNode(myList,index,value):

  #This function is a general function for inserting values in a linked list.  I have provided a
  #skeleton, it is your job to complete it.

  #case 1:  Adding to the head of the list -- index == 0
  #Create a new node and pass back the new node, which is the new head of the list.

    if index==0:
        value['next']=linkedList
        linkedList=value
        return linkedList



  #case 2:  Adding elsewhere in the list
  #use nthNode() to find the node before the position to insert (this will be at index - 1)
  #if this function returns None, then the index is invalid -- print an error message
  #otherwise, add the node


    else:
        if nthNode(linkedList,n)==None:
            print 'Index is invalid'
        else:
            ptr=nthNode(linkedList,n)
            value['next']=ptr['next']
            ptr['next']=value 
            return linkedList



def switch(list, index):
  #Add your code here.
  pass  #remove this once you add code

def removeEvens(list):
  #Add your code here
  pass #remove this once you add code



def listString(linkedList):
  #creates a string representation of the values in the linked list
  ptr = linkedList
  str1 = "["
  while ptr != None:
    str1 += str(ptr['data'])
    ptr = ptr['next']
    if ptr != None:
      str1 += ","
  str1 = str1 + "]"
  return str1

def printList(linkedList):
  #prints all the values in the linked list
  print "in printList"
  return listString(linkedList)


def testInsert():
  #test code to ensure that insertNode is working correctly.
  myList = createList([1, 2, 3, 4, 5, 6])
  print "The initial list", printList(myList)
  #insert 0 at the head
  myList = insertNode(myList,0, 0)
  print "Inserted 0 at the start of list: ", printList(myList)
  #insert 7 at the end
  myList = insertNode(myList, 7, 7)
  print "Inserted 7 at the end of list: ", printList(myList)
  myList= insertNode(myList, 3, 2.2)
  print "Inserted 2.2 in the 3rd position ", printList(myList)
  myList = insertNode(myList, 26, 12)   #should generate an error

def testSwitch():
    #test code to ensure that switch() is working correctly.
    myList = createList([1, 2, 3, 4, 5, 6])
    print "The initial list", printList(myList)
    myList = switch(myList, 0)
    print "Switching the 1 and the 2.  Resulting list is ", printList(myList)
    myList = switch(myList, 3)
    print "Switching the 4 and the 5.  Resuling list is ", printList(myList)
    myList = switch(myList, 5)  #should result in an error
    myList = switch(myList, 29)  #should result in an error

def testRemoveEvens():
    #test code to ensure that removeEvens() is working correctly.
    myList= createList([1, 7, 4, 15, 16, 22])
    print "The initial list", printList(myList)
    myList = removeEvens(myList)
    print "With evens removed, list is :", printList(myList)
    myList = createList([2, 7, 4, 15, 16, 3])
    print "The initial list", printList(myList)
    myList = removeEvens(myList)
    print "With evens removed, list is :", printList(myList)


def main():
    #create an empty list
    #linkedList is the head of the list
    linkedList = emptyList()
    print "Inserting a new node with value 9"
    linkedList = insertValueHead(linkedList, 9)
    printList(linkedList)
    print "Inserting a new node with value 20"
    linkedList = insertValueHead(linkedList, 20)
    printList(linkedList)

main()

另外,如果我想将nthNode的返回值(例如ptr)用于另一个函数,将其设置为全局值是否正确几乎可以肯定没有。谢谢你的回答,给我想要的函数指定一个变量,然后在另一个函数中指定返回值,对吗?ptr=n节点索引列表,n?