单链表set_value方法报AttributeError:修改指定索引值失败求助
问题解决:单链表set_value方法的AttributeError错误
错误原因
你的get方法返回的是节点的value属性值(整数类型),而非节点对象本身。在set_value方法中,你试图给这个整数对象赋值.value属性,自然会触发AttributeError: 'int' object has no attribute 'value'。
修复步骤
1. 修改get方法,返回节点对象而非节点值
将get方法的返回值从temp.value改为temp:
def get(self, index): if index < 0 or index >= self.length: return None temp = self.head for _ in range(index): temp = temp.next return temp # 返回节点对象,不是value
2. 调整调用get方法的代码
主代码中打印索引元素的语句,需要从直接打印get结果改为打印节点的value属性:
print(f"element at index 0: {ll.get(0).value}")
3. 验证修复后的完整代码
修改后的完整代码如下:
class Node: def __init__(self,value): self.value = value self.next = None class LinkedList: def __init__(self,value): newnode = Node(value) self.head = newnode self.tail = newnode self.length = 1 def printList(self): temp = self.head while temp is not None: print(temp.value) temp = temp.next def append(self,value): newnode = Node(value) if self.length == 0: self.head = newnode self.tail = newnode else: self.tail.next = newnode self.tail = newnode self.length += 1 return True def prepend(self,value): newnode = Node(value) if self.length == 0: self.head = newnode self.tail = newnode newnode.next = self.head self.head = newnode self.length += 1 return True def pop(self): if self.length == 0: return None temp = self.head prev = self.head while temp.next is not None: prev = temp temp = temp.next self.tail = prev self.tail.next = None self.length -= 1 if self.length == 0: self.head = None self.tail = None return temp.value def popFirst(self): if self.length == 0: return None temp = self.head self.head = self.head.next temp.next = None self.length -= 1 if self.length == 0: self.tail = None return temp.value def get(self,index): if index < 0 or index >= self.length: return None temp = self.head for _ in range(index): temp = temp.next return temp # 返回节点对象 def set_value(self, index, value): temp = self.get(index) if temp is not None: temp.value = value return True return False ll = LinkedList(1) ll.append(2) ll.append(3) ll.prepend(4) print('linkedlist:') ll.printList() print(f"popped element:{ll.pop()}") print('linkedlist:') ll.printList() print(f"popped element:{ll.popFirst()}") print('linkedlist:') ll.printList() print(f"element at index 0: {ll.get(0).value}") # 改为访问节点的value属性 ll.set_value(0,10) print('linkedlist:') ll.printList()
修复后的运行结果
linkedlist: 4 1 2 3 popped element:3 linkedlist: 4 1 2 popped element:4 linkedlist: 1 2 element at index 0: 1 linkedlist: 10 2
内容的提问来源于stack exchange,提问作者dev0419
相关产品推荐
相关产品推荐

