代码出错帮忙看下
#先定义一个节点的类class Node():
#初始化
def __init__(self,elem):
self.elem=elem
self.next=[]#节点对象一开始的数据区是有的但是next不知道该指向谁先设置为空
node=Node(100)
#定义单链表的类
class Singlelinklist():
def __init__(self,node=None):#链表当中必须得存在一个属性指向第一个节点将链表与节点关联起来,属于类属性,因为在使用链表的时候不是拿类来操作的
self.__head=node#自己内部的函数去使用,对外不暴露,所以将其私有化
def is_empty(self):
return self.__head==None
def length(self):
#cur游标用来移动遍历节点;将cur置于头一个头结点
cur=self.__head=None
#count用来记录数据
count=0
while cur!=None:
count+=1
cur=cur.next
return count
def travel(self):
"""遍历整个列表"""
cur=self.__head
while cur!=None:
print(cur.elem)
cur=cur.next
def add(self,item):
"""链表头部添加元素"""
pass
def append(self,item):
"""链表尾部添加元素"""
node=Node(item)
if self.is_empty():
self.__head=node
else:
cur=self.__head
while cur.next!=None:
cur=cur.next
cur.next=node
def insert(self,pos,item):
"""在指定的位置添加元素"""
pass
def remove(self,item):
"""删除节点"""
pass
def search(self,item):
"""查找节点是否存在"""
pass
if __name__=='__main__':
li=Singlelinklist()
print(li.is_empty())
print(li.length())
li.append(1)
print(li.is_empty())
print(li.length())
li.append(2)
li.append(3)
li.append(4)
li.append(5)
li.append(6)
li.travel()
这个代码我要实现以上的功能但是出了点问题不知道错在哪里,麻烦帮忙指出来并修改一下 while cur!=None:
count+=1
cur=cur.next
这是要干嘛...cur的类型是列表呀! 错误有两处:
第6行,节点初始化的时候,self.next应该为None,因为你后面在俩女表中插入介电的时候都是这么用的。
第17行,cur=self.__head=None 后面的这个=None是个什么鬼?删掉
#先定义一个节点的类
class Node():
#初始化
def __init__(self,elem):
self.elem=elem
self.next=None#节点对象一开始的数据区是有的但是next不知道该指向谁先设置为空
node=Node(100)
#定义单链表的类
class Singlelinklist():
def __init__(self,node=None):#链表当中必须得存在一个属性指向第一个节点将链表与节点关联起来,属于类属性,因为在使用链表的时候不是拿类来操作的
self.__head=node#自己内部的函数去使用,对外不暴露,所以将其私有化
def is_empty(self):
return self.__head==None
def length(self):
#cur游标用来移动遍历节点;将cur置于头一个头结点
cur=self.__head
#count用来记录数据
count=0
while cur!=None:
count+=1
cur=cur.next
return count
def travel(self):
"""遍历整个列表"""
cur=self.__head
while cur!=None:
print(cur.elem)
cur=cur.next
def add(self,item):
"""链表头部添加元素"""
pass
def append(self,item):
"""链表尾部添加元素"""
node=Node(item)
if self.is_empty():
self.__head=node
else:
cur=self.__head
while cur.next!=None:
cur=cur.next
cur.next=node
def insert(self,pos,item):
"""在指定的位置添加元素"""
pass
def remove(self,item):
"""删除节点"""
pass
def search(self,item):
"""查找节点是否存在"""
pass
if __name__=='__main__':
li=Singlelinklist()
print(li.is_empty())
print(li.length())
li.append(1)
print(li.is_empty())
print(li.length())
li.append(2)
li.append(3)
li.append(4)
li.append(5)
li.append(6)
li.travel() 本帖最后由 Stubborn 于 2020-7-13 11:16 编辑
问题比较多{:10_289:} ,参考下这个吧,比较小,找下自己的问题,还有疑问,再回复
class Node:
def __init__(self, value):
self.val = value
self.next = None
class SingleStrand:
def __init__(self):
self._head = None
self._length = 0
@property
def is_empty(self):
return bool(self._head)
@property
def length(self):
return self._length
def __len__(self):
return self._length
def __contains__(self, val):
cur = self._head
while cur is not None:
if cur.val == val:
return True
cur = cur.next
return False
def insert(self, val, idx):
"""指定位置插入"""
if idx == 0:
self.add(val)
elif idx >= self.length:
self.append(val)
else:
cur = self._head
n = 1
while cur.next:
if n == idx: break
cur = cur.next
n += 1
node = Node(val)
node.next = cur.next
cur.next = node
self._length += 1
def add(self, val):
"""头部添加"""
node = Node(val)
node.next = self._head
self._head = node
self._length += 1
def append(self, val):
"""尾部添加"""
cur = self._head
if cur is None:
self.add(val)
else:
node = Node(val)
while cur.next:
cur = cur.next
cur.next = node
self._length += 1
def travel(self, cur=None):
"""单向链表的遍历
递归演示
"""
cur = self._head if cur is None else cur
if cur.next is not None:
return f"-->\t{cur.val}\t" + self.travel(cur.next)
else:
return f"-->{cur.val} --> <<travel over>>"
def travel_(self):
"""单向链表的遍历
非递归演示
"""
cur = self._head
string = f"<<travel start>>\t{cur.val}\t"
while cur.next:
cur = cur.next
string += f"-->\t{cur.val}\t"
return string + "<<travel over>>"
def delete(self, val):
if not self.is_empty:
raise IndexError("Strand is empty")
cur = self._head
if cur.val == val:
self._head = cur.next
while cur.next:
pre = cur
cur = cur.next
if cur.val == val:
pre.next = cur.next
if __name__ == '__main__':
t = SingleStrand()
t.add(1)
t.add(2)
t.append(3)
print(t.travel_()) 1、不要用cur == None,要用cur is None,同理,cur != None应改为 cur is not None
2、node中的next应初始化为None:
class Node:
# 初始化
def __init__(self, elem):
self.elem = elem
self.next = None
3、在length()方法中
def length(self):
#cur游标用来移动遍历节点;将cur置于头一个头结点
cur=self.__head=None
#count用来记录数据
count=0
while cur!=None:
count+=1
cur=cur.next
return count
cur 都初始化为None了,后面就没有意义了
改成这样:
cur=self.__head self.next=None
页:
[1]