链表
指在每个节点中存放下一个节点位置信息
常见的有:单链表(每个节点只有一个向后的指针),双链表(既有向前,也有向后的)
这里我们先介绍一下单链表:
链表包含的如下常用的操作:
- isEmpyt():判断链表是否为空 ;
- lenght():求链表的长度;
- travel():遍历整个链表;
- add(item):在链表的头部添加元素 ;
- append(item):在链表的尾部添加元素;
- insert(pos,item):在链表指定位置添加元素 ;
- remove(item):从链表中删除结点;
- search(item):在链表中查找结点是否存在;
下面给出定义链表及相关方法的代码,由于全部的代码偏长,所以这里就将源码的每个方法单独介绍。
代码示例:
class SingleNode(object):
'''单链表结点'''
def __init__(self,value):
#value描述数据项
self.value=value
#next描述指向下一个元素的指针
self.next=None
class SingleLinkList(object):
'''单向链表'''
def __init__(self):
'''初始化头结点'''
self.head=None
下面的方法都是在SingleLinkList类中进行定义的:
- 判断链表是否为空:如果链表中的表头为空的话,则证明该链表为空
def isEmpty(self):
'''判断链表是否为空'''
return self.head==None
- 计算链表长度
def lenght(self):
'''计算链表长度'''
cur=self.head
count=0 #累加计算长度
while True:
if cur==None:
break
#如果cur非空,指针指向下一个结点
count+=1
cur=cur.next
return count
- 在链表的头部添加元素
def add(self,item):
'''在链表的头部添加元素'''
node=SingleNode(item)
node.next=self.head
self.head=node
- 在链表尾部添加结点
def append(self,item):
'''在链表尾部添加结点'''
node=SingleNode(item)
#如果链表为空,则直接在头部添加结点
if self.isEmpty():
self.head=node
cur=self.head
while cur.next is not None:
cur=cur