![](/img/trans.png)
[英]I am getting an error : AttributeError: 'str' object has no attribute 'isfloat'
[英]For the following code in python, I am getting the error--AttributeError: 'str' object has no attribute 'next'
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def printList(self):
temp = self.head
while(temp):
print(temp.data)
temp = temp.next
def push(self, newData):
newNode = Node(newData)
newNode.next = self.head
self.head = newNode
def insertAfter(self, prevNode, newData):
if prevNode is None:
print("The given node must be in the linked list")
return
newNode = Node(newData)
newNode.next = prevNode.next
prevNode.next = newNode
def append(self, newData):
newNode = Node(newData)
if self.head is None:
self.head = newNode
return
last = self.head
while(last.next):
last = last.next
last.next = newNode
def deleteNode(self, key):
temp = self.head
if(temp is not None):
if(temp.data == key):
self.head = temp.next
temp = None
return
while(temp is not None):
if temp.data == key:
break
prev = temp
temp = temp.next
if(temp == None):
return
prev.next = temp.next
temp = None
def __repr__(self):
return 'LinkedList(%s)' % str(self)
def __iter__(self):
current = self.head
while current:
yield current.data
current = current.next
def __str__(self):
return '[%s]' % ', '.join([x for x in self])
if __name__ == '__main__':
list = LinkedList()
while True:
print("1. Add an element")
print("2. Delete an element")
print("3. Push an element")
print("4. Insert after an element")
print("5. Print the list")
menu = int(input("Choose an action: "))
if menu == 1:
data = input("Add an element: ")
list.append(data)
elif menu == 2:
key = input("Add an existing element to delete: ")
list.deleteNode(key)
elif menu == 3:
newData = input("Push an element: ")
list.push(newData)
elif menu == 4:
prevNode = input("Add an element to insert after[Previous Node]: ")
newData = input("Add an element to insert after[New Data]: ")
list.insertAfter(prevNode,newData)
elif menu == 5:
print(list)
else:
print("Wrong input try again. ")
当我开始在list.insertAfter(prevNode, newData)
中传递一些值时,错误来自insertAfter()
) 但我无法弄清楚错误是如何发生的,任何人都可以帮我解决这个问题。
样本输入:
[上帝,伊鲁武,69]
选择一个动作:4
在[上一个节点]之后添加要插入的元素:iluvu
在[新数据]之后添加要插入的元素:enkk
回溯(最后一次调用):文件“C:/Users/Admin/PycharmProjects/LinkedListIntro/IntroToLinkedList.py”,第 94 行,在 list.insertAfter(prevNode,newData) 文件“C:/Users/Admin/PycharmProjects/LinkedListIntro /IntroToLinkedList.py",第 29 行,在 insertAfter newNode.next = prevNode.next AttributeError: 'str' object 没有属性 'next'
问题是您传递给insertAfter
两个数据值,但insertAfter
期望这两个中的第一个是节点实例,而不是数据值。
所以这是你可以做的:
定义一个find
方法,它将在列表中找到给定的数据值并返回拥有它的节点:
def find(self, data):
current = self.head
while current:
if current.data == data:
return current
current = current.next
现在您可以在insertAfter
中使用此方法:
# The name of the argument changes:
def insertAfter(self, prevData, newData):
# Get the node where this data occurs:
prevNode = self.find(prevData)
if prevNode is None:
print("The given node must be in the linked list")
return
newNode = Node(newData)
newNode.next = prevNode.next
prevNode.next = newNode
最好在elif menu == 4
块中应用相同的名称更改,因为用户输入的是一个值,而不是一个节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.