5,954
社区成员
发帖
与我相关
我的任务
分享
代码
class Haxi: class Lianbiao: def __init__(self, item): self.item = item self.next = None class LinkListIterator: def __init__(self,node): self.node=node def __next__(self): if self.node: cur_node=self.node self.node=cur_node.next return cur_node.item else: raise StopIteration def __iter__(self): return self def __init__(self,li=None): self.head=None#当传进来的li是空,头结点和尾节点都是空 self.end=None if li:#当传进来的li不为空时 self.extend(li)#把数据加入列表,用函数来实现 def extend(self,li): for i in li: self.append(i) def append(self,i):#尾插法插入链表 s=Haxi.Lianbiao(i) if not self.head:#如果列表为空 self.head=s#插入的当头结点 self.end=s else: self.end.next=s#尾插法 self.end=s def __iter__(self):#迭代器类,让链表支持迭代器 return self.LinkListIterator(self.head) def find(self,obj): for i in self: if i==obj: return True else: return False def __repr__(self):#repr()方法定义了实例化对象的输出信息,重写该方法,可以输出我们想要的信息 return "<-"+",".join(map(str,self))+"->"#",".join()表示把()里的东西用,隔开组成一个新的字符串,map(str,self)表示把self里的每一个元素作用与str函数,str()函数将指定的值转换为字符串 lk=Haxi([1,2,3,4,5]) # for i in lk:#有了迭代器类,链表才能支持迭代 # print(i) # print(lk) class Haxibiao: def __init__(self,len=101): self.len=len self.T=[Haxi() for i in range(self.len)]#建一个列表,每个元素都是一个链表 def h(self,k): return k % self.len def insert(self,k): i=self.h(k) if self.find(k): print("不能插入重复的元素") else: self.T[i].append(k) def find(self,k): i=self.h(k) return self.T[i].find(k)#这里进行查找是为了去重,看即将插入的k是不是在列表中已经有了 H=Haxibiao() H.insert(1) H.insert(0) H.insert(3) H.insert(4) H.insert(102) H.insert(508) print(",".join(map(str,H.T)))#打印哈希表T print(H.find(5)) print(H.find(102))
问题
倒数第二行为什么输出None,而不是False
倒数第一行为什么输出False,不是已经插入了吗
解决了兄弟们
def find(self,obj):
for i in self:
if i==obj:
return True
else:
return False这一段有问题,没有遍历完整
改成
def find(self, obj):
node = self.head
while node:
if node.item == obj:
return True
node = node.next
return False问题就解决了