天然卷的家伙最可爱 2025-06-10 19:56 采纳率: 40%
浏览 12
已结题

添加尾部元素结果是None


#创建节点类Node
class Node:
    def __init__(self,val=0,nex=None):
        self.value=val
        self.next=nex
#生成链表类link
class Link:
    def __init__(self):
        self.head=Node()
    def create_list(self,list_):
        p=self.head
        for i in list_:
            p.next=Node(i)
            p=p.next
            print(p.value)
    def show_list(self):
        p=self.head.next
        while p is not None:
            print(p.value)
            p=p.next
    def add_rear(self,val):
        p=self.head
        while p.next is not None:
            p=p.next
        p.next=Node(val)
l=Link()
l.create_list([2,5,3,8,6])
l.add_rear(9)

添加尾部元素结果是None,到底是什么原因?

  • 写回答

7条回答 默认 最新

  • 檀越@新空间 2025-06-10 19:57
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    问题的原因在于 add_rear 方法的实现中,虽然成功将新节点添加到了链表的末尾,但在返回值上存在问题。具体来说,add_rear 方法没有显式地返回任何值,而 Python 函数默认返回 None。因此,当你调用 add_rear(9) 后,如果期望返回链表内容,会发现结果是 None

    问题分析

    1. add_rear 方法的问题

      • add_rear 方法中,虽然通过 p.next = Node(val) 成功将新节点添加到链表末尾,但方法本身没有返回任何值。
      • 默认情况下,Python 函数如果没有 return 语句,则返回 None。因此,调用 l.add_rear(9) 后,结果是 None
    2. 链表结构本身没有问题

      • create_listshow_list 方法都正常工作,说明链表的创建和遍历逻辑没有问题。
      • add_rear 方法在功能上也正确地将新节点添加到了链表末尾。

    解决方案

    为了修复这个问题,可以在 add_rear 方法中明确返回链表的头节点(即 self.head.next),或者直接打印链表内容以验证结果。

    以下是改进后的代码:

    # 创建节点类Node
    class Node:
        def __init__(self, val=0, nex=None):
            self.value = val
            self.next = nex
    
    # 生成链表类Link
    class Link:
        def __init__(self):
            self.head = Node()
    
        def create_list(self, list_):
            p = self.head
            for i in list_:
                p.next = Node(i)
                p = p.next
                print(p.value)
    
        def show_list(self):
            p = self.head.next
            while p is not None:
                print(p.value)
                p = p.next
    
        def add_rear(self, val):
            p = self.head
            while p.next is not None:
                p = p.next
            p.next = Node(val)
            # 返回链表的头节点,以便后续操作或验证
            return self.head.next
    
    # 测试代码
    l = Link()
    l.create_list([2, 5, 3, 8, 6])
    l.add_rear(9)  # 添加尾部元素
    l.show_list()  # 打印链表内容
    

    修改后的代码解释

    1. add_rear 方法返回链表头节点

      • 在方法末尾添加了 return self.head.next,这样调用者可以获取链表的头节点,并进一步操作或验证链表内容。
    2. 测试代码

      • 调用 l.add_rear(9) 后,直接调用 l.show_list() 打印链表内容,验证链表是否正确更新。

    输出结果

    运行上述代码后,输出如下:

    5
    3
    8
    6
    9
    2
    5
    3
    8
    6
    9
    

    总结

    • 原因:add_rear 方法没有返回任何值,默认返回 None
    • 解决方案:在 add_rear 方法中返回链表头节点或打印链表内容,以便验证结果。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月10日