先看段代码,关于递归生成链表的问题,先自己判断会输出什么,再看结果
class Node:
def __init__(self):
self.val = None
self.next = None
def ccc(node,x,res):
if res == x:
return
node = Node()
node.val = res
res = res + 1
ccc(node.next,x,res)
x = Node()
ccc(x,6,0)
print x.val
结果输出为None,为什么呢?明明已经调用了ccc函数,也把头结点穿进去了,怎么会这样呢?原因在于首先执行了x = Node(),我们假设给x分配了001的内存地址,这个内存里面放的就是Node类的一个实例,接着我们调用了ccc函数,将x传递给了ccc函数的参量node,现在node也指向了001的内存地址,到这似乎没什么问题,但接下来node = Node()这一步就是问题关键所在,现在node不在指向001的内存地址,而是被新分配了一个内存地址002,里面也存放的是Node类的一个实例,而我们头结点所指向的内存并不被ccc函数执行,所以001内存里的数据并没有因为ccc的调用而更新。
好了既然知道了问题所在