Python双向链表插入节点

# 定义一个链表节点
class Node():
	def __init__(self,data=None):
		self.val = data
		self.pre = None
		self.next = None

# 定义双向链表		
class biLinkedList():
	def __init__(self):
		self.head = None
	
	# 获取链表长度
	def length(self):
		curr = self.head
		count = 0
		while curr != None:
			count += 1
			curr = curr.next
		return count
	
	# 插入节点
	def insert(self,index,data):
		node = Node(data)
		# 在头部插入
		if index <= 0:
			# 如果链表为空
			if self.head == None: 
				self.head = node
			else:
				node.next = self.head # 节点下一个指向head
				self.head.pre = node # head的上一个指向node
				self.head = node # head指向node
			
		# 在尾部插入
		elif index > self.length-1:
			if self.head == None: 
				self.head = node
			else:
				# 将指针移动到链表尾部
				curr = self.head
				while curr.next != None:
					curr = curr.next
				
				curr.next = node # 尾节点的下一个指向节点
				node.prev = curr # 节点的上一个指向尾节点
			
		# 在中间插入
		else:
			curr = self.head
			count = 0
			# 将指针移动到要插入位置的前一个位置
			while count < index-1:
				count += 1
				curr = curr.next
			
			node.pre = curr # 节点的上一个指向当前
			node.next = curr.next # 节点的下一个指向当前下一个
			curr.next.pre = node # 当前的下一个的上一个指向节点
			curr.next = node # 当前的下一个指向节点

# https://jackkuo666.github.io/Data_Structure_with_Python_book/chapter3/section3.html
# https://blog.csdn.net/qq490691606/article/details/49948263 (insert不能实现在尾部插入节点)

猜你喜欢

转载自blog.csdn.net/qxqxqzzz/article/details/129826249
今日推荐