版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37973607/article/details/86545109
class Node():
def __init__(self,item):
self.__item=item
self.__next=None
self.__previous=None
def getItem(self):
return self.__item
def getNext(self):
return self.__next
def getPrevious(self):
return self.__previous
def setItem(self,newitem):
self.__item=newitem
def setNext(self,newnext):
self.__next=newnext
def setPrevious(self,newprevious):
self.__previous=newprevious
class TwoWayNode(Node):
def __init__(self):
self.__head=None
def isEmpty(self): #检测链表是否为空
return self.__head==None
def count(self):
current=self.__head
count=0
while current!=None:
count+=1
current=current.getNext()
return count
def travel(self):
current=self.__head
while current!=None:
print(current.getItem(),end=" ")
current=current.getNext()
print()
def add(self,item): #在链表前端添加元素
temp=Node(item)
if self.isEmpty():
self.__head=temp
else:
temp.setNext(self.__head)
self.__head.setPrevious(temp)
self.__head=temp
def append(self,item): #在链表尾部添加元素
temp=Node(item)
if self.isEmpty():
self.__head=temp #若为空表,将添加的元素设为第一个元素
else:
current=self.__head
while current.getNext()!=None:
current=current.getNext() #遍历链表
current.setNext(temp) #此时current为链表最后的元素
temp.setPrevious(current)
def search(self,item): #检索元素是否在链表中
current=self.__head
while current.getNext()!=None:
if current.getItem()!=item:
current=current.getNext()
else:
return True
return False
def index(self,item): #索引元素在链表中的位置
current=self.__head
count=0
while current.getNext()!=None:
count+=1
if current.getItem()!=item:
current=current.getNext()
else:
return count
return False
def remove(self,item): #删除链表中的某项元素
current=self.__head
while current.getNext()!=None:
if current.getItem()!=item:
current=current.getNext()
else:
if not current:
self.head=current.getNext()
current.getNext().setPrevious(None)
else:
current.getPrevious().setNext(current.getNext())
current.getNext().setPrevious(current.getPrevious)
break
def insert(self,index,item): #链表中插入元素
if index<=1:
self.add(item)
elif index>self.count():
self.append(item)
else:
temp=Node(item)
current=self.__head
count=1
while count<index:
count+=1
current=current.getNext()
current.getPrevious().setNext(temp)
temp.setPrevous(current.getPrevious())
temp.setNext(current)
current.setPrevious(temp)
if __name__=='__main__':
a=TwoWayNode()
for i in range(1,10):
a.append(i)
a.travel()
print(a.count())
print(a.search(6))
print(a.index(6))
a.remove(6)
a.travel()
a.insert(9,100)
a.travel()