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