我的問題是在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