python单向链表的代码实现

链表基本介绍

单向链表也叫单链表,是链表中最简单的一种形式,是由节点组成的一条链,它的每个节点包含两个域,一个信息域(元素域)和一个链接域,这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。所以实现时需要定义节点类,包含存储信息域的字段属性和链接域的属性。再定义具体的链表类操作节点。

链表结构

这里写图片描述

链表的节点实现

# 节点类python实现,用于创建节点对象
class Node(object):
	def __init__(self, item):
		# 信息域
		self.item = item
		# 链接域
		self.next = None

链表的操作方法实现

# 链表类python实现,用于创建链表对象
class LinkList(object):
	def __init__(self):
		# 记录头结点,存储node对象
		self.head = None
	
	def is_empty(self):
		# 如果头结点为空则链表为空
		# 因为头结点存储node对象
		return self.head is None
		
	def add(self, item):
		# 创建node对象
		node = Node(item)
		# node对象指向当前头结点
		node.next = self.head
		# head存储头节点对象
		self.head = node
		
	def append(self):
		# 创建node对象
		node = Node(item)
		# 链表为空,直接存入头部
		if self.is_empty():
			self.head = node
		# 遍历链表到最后并添加
		else:
			cur = self.head
			# 链表最后元素的链接域为None
			while cur.next:
				cur = cur.next
			cur.next = node
		
	def insert(self, position, item):
		# 0位置插入,即插入头节点,调用add方法
		if position == 0:
			self.add(item)
		# 向任意位置插入节点
		elif 0 < position <= self.len():
			node = Node(item)
			count = 0
			cur = self.head
			while cur:
				if position == count + 1:
					# 插入节点
					 node.next = cur.next
					 cur.next = node
				cur = cur.next
				count += 1
		# 范围控制,抛出越界异常
		else:
			raise 'index out of range'
			
	def len(self):
		cur = self.head
		count = 0
		# 遍历计数
		while cur:
			count += 1
			cur = cur.next
		return count
		
	def travel(self):
		# 取头元素
		cur = self.head
		while cur:
			print(cur.item, end='-->')
			cur = cur.next
		print('None')
			
	def	remove(self, item):
		# 当前节点
		cur = self.head
		# 存储当前节点的上一节点
		cur_pre = None
		while cur:
			# 遍历到相等
			if cur.item == item:
				# 如果是头结点
				if cur_pre is None:
					self.head = cur.next
				# 其他情况,删除当前节点
				else:
					cur_pre.next = cur.next
			cur_pre = cur
			cur = cur.next
		
	def search(self, item):
		cur = self.head
		while cur:
			# 找到返回true
			if cur.item == item
				return True
			cur = cur.next
		# 遍历结束,返回False
		return False

注意:这是单链表的python实现,除此以外还有单向循环链表,双向链表等,可以参考自己实现,原理相同。

猜你喜欢

转载自blog.csdn.net/MrNoboday/article/details/81836310