python单链表

一、定义一个单链表节点类

class Node(Object):
	def __init__(self,data,next=None): #该方法用于初始化一个类
		self.data=data
		self.next=next

二、使用单链表节点类 

node1=Node('A',None)
node2=Node('B',node1)
node3=Node('C',node3)

三、单链表结构上的操作 

class Node():
	def __init__(self,item,next=None):
		self.__item=item
		self.__next=next
	def getItem(self):
		return self.__item
	def getNext(self):
		return self.__next
	def setItem(self,newitem):
		self.__item=newitem
	def setNext(self,newnext):
		self.__next=newnext
class SingleLinkedList(Node): 
	def __init__(self):
		self.__head=None    #初始化链表为空表
		self.__size=0
	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)
		temp.setNext(self.__head)
		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为链表最后的元素
	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
		pre=current
		while current.getNext()!=None:
			if current.getItem()!=item:
				pre=current
				current=current.getNext()
			else:
				if not pre:
					self.head=current.getNext()
				else:
					pre.setNext(current.getNext())
				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
				pre=current
				current=current.getNext()
			pre.setNext(temp)
			temp.setNext(current)
	
if __name__=='__main__':
	a=SingleLinkedList()
	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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值