晚上好🌙🌙🌙
本答案参考通义千问
问题的原因在于 add_rear 方法的实现中,虽然成功将新节点添加到了链表的末尾,但在返回值上存在问题。具体来说,add_rear 方法没有显式地返回任何值,而 Python 函数默认返回 None。因此,当你调用 add_rear(9) 后,如果期望返回链表内容,会发现结果是 None。
问题分析
-
add_rear 方法的问题:
- 在
add_rear 方法中,虽然通过 p.next = Node(val) 成功将新节点添加到链表末尾,但方法本身没有返回任何值。 - 默认情况下,Python 函数如果没有
return 语句,则返回 None。因此,调用 l.add_rear(9) 后,结果是 None。
-
链表结构本身没有问题:
create_list 和 show_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() # 打印链表内容
修改后的代码解释
-
add_rear 方法返回链表头节点:
- 在方法末尾添加了
return self.head.next,这样调用者可以获取链表的头节点,并进一步操作或验证链表内容。
-
测试代码:
- 调用
l.add_rear(9) 后,直接调用 l.show_list() 打印链表内容,验证链表是否正确更新。
输出结果
运行上述代码后,输出如下:
5
3
8
6
9
2
5
3
8
6
9
总结
- 原因:
add_rear 方法没有返回任何值,默认返回 None。 - 解决方案:在
add_rear 方法中返回链表头节点或打印链表内容,以便验证结果。