Python学习笔记之三单链表

创建节点功能

class SingleNode(object):
	"""单链表的节点"""
	def __init__(self,item):	
		#item存放节点数据
		self.name = item
		#next存放下一节点标识
		self.next = None

创建单链表类实现功能

class SingleLinkList(object):
	def __init__(self,node = None):
		# 当没有传入参数时,链表为空链表,因此设定node默认值为空
		# 空链表__head = node  非空链表__head = node
		self.__head = node
	
	def is_empty(self):
		"""空链表判断"""
		#if self.__head == None:
			#return True
		#else:
			#return False
		return self.__head == None
	
	def length(self):
		"""获取链表长度"""
		count = 0
		#创建一个指针用来定位
		cur = self.__head
		while cur != None:
			cur = cur.next
			count += 1
		return count
	
	def travel(self):
		"""遍历链表输出列表中的元素"""
		cur = cur.__head
		while cur != None:
			print(cur.item , end = " ")
			cur = cur.next
		print("")
	
	def add(self,item):
		"""表头插入元素"""
		#创建节点
		node = SingleNode(item)
		#新节点指向__head指向的位置
		node.next = self.__head
		#__head指向新节点
		self.__head = node
	
	def append(self,item):
		"""表尾插入节点"""
		#创建节点
		node = SingleNode(item)
		#考虑特殊情况,空链表的插入
		if self.is_empty():
			self.__head = node
		else:
			#将指针移动到表尾
			cur = self.__head
			while cur.next != None
				cur = cur.next
			cur.next = node
	
	def insert(self,pos,item):
		"""指定位置插入节点"""
		#特殊情况1,pos为负数或0,此时表头插入
		if pos <= 0:
			self.add(item)
		#特殊情况2,pos大于表长-1,此时表尾插入
		elif pos >(self.length()-1):
			self.append(item)
		else:
			node =SingleNode
			count = 0
			#创建一个指针用来指向pos前的位置pos-1,从首位置移动到pos-1
			pre = self.__head
			while count < (pos-1):
				count += 1
				pre = pre.next
			node.next = pre.next
			pre.next = node
	def pop(self):
		"""删除最后一个节点"""
        if self.is_empty():
            return False
        else:
            cur = self.__head
            pre = None
            if cur._next == None:
                self.__head = None
            else:
                while cur._next != None:
                    pre = cur
                    cur = cur._next
                pre._next = None
	
	def remove(item):
		"""删除指定节点"""
		#空链表不进入循环,item不存在则对链表无操作
		cur = self.__head
		pre = None
		while cur != None:
			#找到节点
			if cur.item == item:
				#特殊情况1,首节点就要删除
				if cur = self.__head:
					self.__head = cur.next
				else:
					pre.next = cur.next
				break
			else:
				#没找到节点,继续移动
				pre = cur
				cur = cur.next
	
	def search(self,item):
		"""查询节点是否存在"""
		cur = self.__head
		while cur != None:
			if cur.item = item:
				return True
			else:
				cur = cur.next
		return False
			

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值