用python实现单链表
2016-07-07 10:19
507 查看
#!/usr/bin/env python3
#!-*-encoding:utf-8-*-
#定义一个基于节点类的单链表对象类
class LNode:
#_next防止与python标准函数next重名
def __init__(self,elem,_next=None):
self.elem=elem
self.next=_next
#定义单链表
class LList:
def __init__(self):
#初始化为None表示建立的为空表
self._head=None
#判断单链表是否为空
def is_empty(self):
return self._head is None
#表头插入数据
def prepend(self,elem):
self._head=LNode(elem,self._head)
#删除表头节点并返回节点里边的数据
def pop(self):
if self._head is None: #无节点引发异常
raise LinkedListUnderflow('in pop')
e=self._head.elem
self._head=self.head.next
return e
#后端操作,后端加入
def append(self,elem):
if self._head is None:
self._head=LNode(elem)
return
p=self._head
while p.next is not None:
p=p.next
p.next=LNode(elem)
#删除最后一个元素
def pop_last(self):
#如果链表为空表
if self._head is None:
raise LinkedListUnderflow('in pop_last')
#如果链表只有一个元素
p=self._head
if p.next is None:
e=p.elem
self._head=None
return e
while p.next.next is not None: #直到p.next是最后一个元素
p=p.next
e=p.next.elem
p.next=none
return p
def find(self,pred):
p=self._head
while p is not None:
if pred(p.elem):
return p.elem
p=p.next
#打印所有的节点元素
def print_all(self):
p=self._head
while p is not None:
print(p.elem)
print('end')
p=p.next
#应用实例:
mlist1=LList()
for i in range(1,10):
mlist1.prepend(i)
for i in range(11,20):
mlist1.append(i)
mlist1.print_all()
#!-*-encoding:utf-8-*-
#定义一个基于节点类的单链表对象类
class LNode:
#_next防止与python标准函数next重名
def __init__(self,elem,_next=None):
self.elem=elem
self.next=_next
#定义单链表
class LList:
def __init__(self):
#初始化为None表示建立的为空表
self._head=None
#判断单链表是否为空
def is_empty(self):
return self._head is None
#表头插入数据
def prepend(self,elem):
self._head=LNode(elem,self._head)
#删除表头节点并返回节点里边的数据
def pop(self):
if self._head is None: #无节点引发异常
raise LinkedListUnderflow('in pop')
e=self._head.elem
self._head=self.head.next
return e
#后端操作,后端加入
def append(self,elem):
if self._head is None:
self._head=LNode(elem)
return
p=self._head
while p.next is not None:
p=p.next
p.next=LNode(elem)
#删除最后一个元素
def pop_last(self):
#如果链表为空表
if self._head is None:
raise LinkedListUnderflow('in pop_last')
#如果链表只有一个元素
p=self._head
if p.next is None:
e=p.elem
self._head=None
return e
while p.next.next is not None: #直到p.next是最后一个元素
p=p.next
e=p.next.elem
p.next=none
return p
def find(self,pred):
p=self._head
while p is not None:
if pred(p.elem):
return p.elem
p=p.next
#打印所有的节点元素
def print_all(self):
p=self._head
while p is not None:
print(p.elem)
print('end')
p=p.next
#应用实例:
mlist1=LList()
for i in range(1,10):
mlist1.prepend(i)
for i in range(11,20):
mlist1.append(i)
mlist1.print_all()
相关文章推荐
- Python信息采集器使用轻量级关系型数据库SQLite
- 全面了解python字符串和字典
- python通过thrift连接Hbase
- python-正则表达式
- python 添加opencv 接口
- 对于Python中RawString的理解介绍
- python
- Python os.makedirs try 以及 raise
- python中的深拷贝和浅拷贝理解
- python中字典按键或键值排序
- 对于Python中RawString的理解介绍
- 全面了解python字符串和字典
- Python处理json字符串转化为字典的简单实现
- 简单掌握Python的Collections模块中counter结构的用法
- 详解Python的collections模块中的deque双端队列结构
- Python的collections模块中namedtuple结构使用示例
- Python的collections模块中的OrderedDict有序字典
- 简介Python的collections模块中defaultdict类型的用法
- Python中的os.path路径模块中的操作方法总结
- python mock基本使用经验分享