正常实现:
class Node:
def __init__(self,item,next = None,prev = None):
self.item = item
self.next = next
self.prev = prev
def __repr__(self):
return '{} --> {}'.format(self.item ,self.next.item if self.next else None)
class LinkedList:
def __init__(self):
self.tail = None
self.head = None
def apend(self,item):
node = Node(item) #执行apend 实例化Node
tail = self.tail
if tail is None:
self.head = node
else:
tail.next = node
self.tail = node
return self
def __repr__(self):
pass
def iternodes(self):
current = self.head
while current:
yield current
current = current.next
ll = LinkedList()
ll.apend('begin').apend('a').apend('b').apend('c').apend('end')
for x in ll.iternodes():
print(x)
实现效果:
问题实现:
class Node:
def __init__(self,item,next = None,prev = None):
self.item = item
self.next = next
self.prev = prev
def __repr__(self):
return '{} --> {}'.format(self.item,self.next.item if self.next else None)
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def append(self,item):
n = Node(item)
tail = self.tail
head = self.head
if head is None:
head = n
else:
tail.next = n
tail = n
return self
def iternodes(self):
current = self.head
while current:
yield current
current = current.next
ll = LinkedList()
ll.append('begin').append('1').append('2').append('3').append('end')
for x in ll.iternodes():
print(x)
实现效果:
----------没有实现
问题所在点:
问题代码和正常代码均查看23行,是引用类型出了问题: 前者为问题代码,后者正常。
我们来理解一下链表中数据存储的状态以及对其的引用:
第一步:
第二步:
总结:
代码力图精简,不要追求所谓的看起来清楚而添加赘余变量,这样很可能导致自己都没有意识到错误产生了,能写一行决不写两行!