数据结构与算法 python实现 双端链表

数据结构与算法

双端链表
有三个值:value prev next
数据属性:root maxsize lenght
方法:headnode tailnode append appendlift remove itne_node iter_node_reverse

实现一个DoubleLinedList

class Node(object):
	def __init__(self,valur = None, prev = None,next = None):
		self.value,self.prev,self = value,prev,next

class DoubleLinedList(object):
	def __init__(self,maxsize = None):
		#最大长度
		self.maxsize = maxsize
		node = Node():
		#自己指向自己
		node.next,node.prev = node,node 
		#根节点
		self.root = node
		#长度
		self.length = node
	def __len__(self):
		return self.length
	#获取头节点
	def headnode(self):
		return self.root.next
	#获取尾节点
	def talinode(self):
		return self.root.prev
	#从右边添加一个值
	def append(self,value):
		#判断是否超长
		if self.length is not Node and len(self) > self.maxsize:
			raise Exception('Full')
		#实例化新节点
		node = Node(value = value)
		#定义一个尾节点
		tailnode = self.tailnode
		#尾节点的下一个节点指向当前节点
		tailnode.next = node
		#当前节点的上一个节点指向尾节点
		node.prev = tailnode
		#当前节点的下一个节点指向root
		node.next = self.root
		#入口的上一个节点指向当前节点
		self.root.prev = node
		self.length += 1

	#实现一个往左边插入
		def appenfleft(self,value):
			#判断是否超长
			if self.length is not Node and len(self) > self.maxsize:
				raise Exception('Full')
			#生成新节点
			node = Node(value=value)
			#判断链表中是不是空的
			if self.root.next is self.root
				#新建节点的的下一个节点指向root
				node.next = self.root
				#当前节点的上一个节点指向root
				node.prev = self.root
				#root的下一个节点指向当前节点
				self.root.next = node
				#root的上一个节点指向当前节点
				self.root.prev = nde
			else:
				#当前节点的上一个节点指向root
				node.prev = self.root
				#头节点指向root的下一个节点
				headnode = self.root.next
				#当前节点的下一个节点指向头节点
				node.next = headnode
				#头节点的上一个节点指向当前节点
				headnode.prev = node
				#root的下一个节点指向当前节点
				self.root.next = node

	#删除
	def remove(self,node):
		#判断是不是根接单
		if node is self.root:
			return
		else:
			#前一个节点下的下一个节点,指向当前节点的下一个节点
			node.prev.next = node.next
			#上一个节点的上一个节点指向当前节点的上一个节点
			node.next.prev = node.prev
		#长度减一
		self.length -= 1
		return node

	#遍历
	def __iter__(self):
		#如果是空链表就不进行操作
		if self.root.next is self.root
			return
		#取到头节点
		cuenode = self.root.next
		#头节点的下一个节点不是root
		while curnode.next is not self.root:
			#生成节点
			yield curnode
			curnode = curnode.next
		yeild curnode

	#遍历
	def iter_node(self):
		#如果是空链表就不进行操作
		if self.root.next is self.root
			return
		#取到头节点
		cuenode = self.root.next
		#头节点的下一个节点不是root
		while curnode.next is not self.root:
			#生成节点
			yield curnode
			curnode = curnode.next
		yeild curnode
		#遍历
		def __iter__(self):
			        for node in self.iter_node():
            yield node.value
    #倒遍历
    def iter_node_reverse(self):
        #入口的上一个节点不是入口
        if self.root.prev is not self.root:
            return
        #生成头节点
        curnode = self.root.prev
        #头接节点的上一个节点不是入口
        while curnode.prev is not self.root:
            #生成头节点
            yield curnode
            #头节点的上一个节点
            curnode = curnode.perv
        #生成头节点
        yield curnode

你可能感兴趣的:(python)