我的问题是在del_node
方法,尽管设置self = self.next
,这似乎没有影响正在进行调用的类的实例。Python方法不影响类的实例
例如 如果我有一个链表L = 1 - > 2 - > 3 - > 4
主叫L.del_node(x)
,其中x
是任何节点比所述第一其他, 简单地使呼叫这样将工作,但是,如果我打电话给 L.del_node(1)
我要称呼其为L = L.del_node(1);
我假设这必须做 与不改变的情况下的任何值,因为我与其他人(如复位 self.data
/next
,等等)。
我问,因为我很困惑,为什么声明self = self.next
似乎并没有影响 实例时self.data = ...
一样。
class Node():
def __init__(self,data = None):
self.data = data
self.next = None
def add_node(self,data):
if self.data == None:
self.data = data
else:
while self.next != None:
self = self.next
self.next = Node(data)
def del_node(self,data):
if self.data == None:
print "ERROR: Null list"
return self
elif self.data == data:
if self.next == None:
self.data = None
return self
else:
#this seems to be the only case where
#instance = instance.del_node() matters (why?)
#opposed to just instance.del_node()
return self.next
start = self
prev = self
self = self.next
while self.next != None:
if self.data == data:
prev.next = self.next
return start
prev = self
self = self.next
if self.data == data:
prev.next = None
return start
else:
print "ERROR: value not in list"
return start
def get_len(self):
length = 0
if self.data == None:
return length
while self.next != None:
length += 1
self = self.next
return length + 1
def __str__(self):
string = ''
while self.next != None:
string += str(self.data) + ' -> '
self = self.next
return string + str(self.data)
如果你想滚动你自己的链表,你需要存储列表的开始。另外,尽管可以使用self变量遍历列表,但它的格式很糟糕 - 使用不同的变量名称,例如currentNode或其他。如果您正在学习数据结构,它可以帮助绘制图片。 – pwray 2014-09-05 00:43:06