A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

单链表的操作
is_empty()        链表是否为空 length()        链表⻓度 travel()        遍历整个链表
add(item)        链表头部添加元素 append(item)        链表尾部添加元素 insert(pos,        item)        指定位置添加元素 remove(item)        删除节点 search(item)        查找节点是否存在
单链表的实现

[AppleScript] 纯文本查看 复制代码
class	SingleLinkList(object):				"""单链表"""				def	__init__(self):								self.__head	=	None
				def	is_empty(self):								"""判断链表是否为空"""								return	self.__head	==	None
				def	length(self):								"""链表⻓度"""								#	cur初始时指向头节点								cur	=	self.__head								count	=	0								#	尾节点指向None,当未到达尾部时								while	cur	!=	None:												count	+=	1												#	将cur后移⼀个节点												cur	=	cur.next								return	count
				def	travel(self):								"""遍历链表"""								cur	=	self.__head								while	cur	!=	None:												print	cur.item,												cur	=	cur.next								print	""

头部添加元素
       

[AppleScript] 纯文本查看 复制代码
def	add(self,	item):								"""头部添加元素"""								#	先创建⼀个保存item值的节点								node	=	SingleNode(item)								#	将新节点的链接域next指向头节点,即_head指向的位置								node.next	=	self.__head								#	将链表的头_head指向新节点								self.__head	=	node

尾部添加元素
[AppleScript] 纯文本查看 复制代码
	def	append(self,	item):								"""尾部添加元素"""								node	=	SingleNode(item)								#	先判断链表是否为空,若是空链表,则将_head指向新节点								if	self.is_empty():												self.__head	=	node								#	若不为空,则找到尾部,将尾节点的next指向新节点								else:												cur	=	self.__head												while	cur.next	!=	None:																cur	=	cur.next												cur.next	=	node

指定位置添加元素


[AppleScript] 纯文本查看 复制代码
		def	insert(self,	pos,	item):								"""指定位置添加元素"""								#	若指定位置pos为第⼀个元素之前,则执⾏头部插⼊								if	pos	<=	0:												self.add(item)								#	若指定位置超过链表尾部,则执⾏尾部插⼊								elif	pos	>	(self.length()-1):												self.append(item)								#	找到指定位置								else:												node	=	SingleNode(item)												count	=	0												#	pre⽤来指向指定位置pos的前⼀个位置pos-1,初始从头节点开 始移动到指定位置												pre	=	self.__head												while	count	<	(pos-1):																count	+=	1																pre	=	pre.next												#	先将新节点node的next指向插⼊位置的节点												node.next	=	pre.next												#	将插⼊位置的前⼀个节点的next指向新节点												pre.next	=	node

删除节点
       

[AppleScript] 纯文本查看 复制代码
	def	remove(self,item):								"""删除节点"""								cur	=	self.__head								pre	=	None								while	cur	!=	None:												#	找到了指定元素
	if	cur.item	==	item:																#	如果第⼀个就是删除的节点																if	not	pre:																				#	将头指针指向头节点的后⼀个节点																				self.__head	=	cur.next																else:																				#	将删除位置前⼀个节点的next指向删除位置的后⼀个 节点																				pre.next	=	cur.next																break												else:																#	继续按链表后移节点																pre	=	cur																cur	=	cur.next

查找节点是否存在
       
[AppleScript] 纯文本查看 复制代码
	def	search(self,item):								"""链表查找节点是否存在,并返回True或者False"""								cur	=	self.__head								while	cur	!=	None:												if	cur.item	==	item:																return	True												cur	=	cur.next								return	False[/size][/font]
[font=微软雅黑][size=3]

测试

[AppleScript] 纯文本查看 复制代码
if	__name__	==	"__main__":				ll	=	SingleLinkList()				ll.add(1)				ll.add(2)				ll.append(3)				ll.insert(2,	4)				print	"length:",ll.length()				ll.travel()
	print	ll.search(3)				print	ll.search(5)				ll.remove(1)				print	"length:",ll.length()				ll.travel()


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马