python双链表

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()

猜你喜欢

转载自blog.csdn.net/m0_37973607/article/details/86545109