You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单链表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:22:48