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

如何在链表插入方法中传入Node实例作为prev_node参数?

链表指定节点后插入元素的参数传递错误

我实现了一个在链表指定节点后插入元素的方法:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    # 在链表头部插入节点
    def push_node(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    # 在指定节点后插入新节点
    def insert_node_after(self, data, prev_node):
        if self.head is None: 
            self.push_node(data)  # 原代码此处缺失右括号,已修正
        # if prev_node is None: self.push_node(data)
        new_node = Node(data)
        new_node.next = prev_node.next
        prev_node.next = new_node

    # 打印链表
    def print_list(self):
        current_node = self.head
        while current_node is not None:
            print(f'{current_node.data} -> ', end='')
            current_node = current_node.next
        print(f'None')

编写驱动代码运行时报错:

llist = LinkedList()
llist.push_node(4)
llist.push_node(3)
llist.push_node(2)
llist.push_node(1)
llist.push_node(100)

llist.insert_node_after(5, 2)

错误信息:

new_node.next = prev_node.next
AttributeError: 'int' object has no attribute 'next'


问题原因

你传入的2是整数类型,而insert_node_after方法的prev_node参数要求是Node类的实例,整数没有next属性,因此触发报错。

解决方法

方法一:手动查找目标Node实例后传入

先遍历链表,找到存储数据为2的节点对象,再将该对象传入方法:

llist = LinkedList()
llist.push_node(4)
llist.push_node(3)
llist.push_node(2)
llist.push_node(1)
llist.push_node(100)

# 遍历找到data为2的节点
target_node = None
current = llist.head
while current:
    if current.data == 2:
        target_node = current
        break
    current = current.next

if target_node:
    llist.insert_node_after(5, target_node)
    llist.print_list()
else:
    print("未找到指定的前驱节点")

方法二:修改insert_node_after方法,支持传入数据自动查找节点

直接修改方法,让它接受前驱节点的数据值,内部自动完成节点查找,调用时更便捷:

class LinkedList:
    # 其他方法保持不变,仅修改insert_node_after
    def insert_node_after(self, data, prev_data):
        if self.head is None:
            self.push_node(data)
            return
        
        # 查找对应数据的前驱节点
        current = self.head
        prev_node = None
        while current:
            if current.data == prev_data:
                prev_node = current
                break
            current = current.next
        
        if not prev_node:
            print("指定的前驱节点不存在")
            return
        
        new_node = Node(data)
        new_node.next = prev_node.next
        prev_node.next = new_node

修改后直接按原方式调用即可:

llist.insert_node_after(5, 2)
llist.print_list()

内容的提问来源于stack exchange,提问作者Future Billionaire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:23:12