链表基本介绍
单向链表也叫单链表,是链表中最简单的一种形式,是由节点组成的一条链,它的每个节点包含两个域,一个信息域(元素域)和一个链接域,这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。所以实现时需要定义节点类,包含存储信息域的字段属性和链接域的属性。再定义具体的链表类操作节点。
链表结构
链表的节点实现
# 节点类python实现,用于创建节点对象
class Node(object):
def __init__(self, item):
# 信息域
self.item = item
# 链接域
self.next = None
链表的操作方法实现
# 链表类python实现,用于创建链表对象
class LinkList(object):
def __init__(self):
# 记录头结点,存储node对象
self.head = None
def is_empty(self):
# 如果头结点为空则链表为空
# 因为头结点存储node对象
return self.head is None
def add(self, item):
# 创建node对象
node = Node(item)
# node对象指向当前头结点
node.next = self.head
# head存储头节点对象
self.head = node
def append(self):
# 创建node对象
node = Node(item)
# 链表为空,直接存入头部
if self.is_empty():
self.head = node
# 遍历链表到最后并添加
else:
cur = self.head
# 链表最后元素的链接域为None
while cur.next:
cur = cur.next
cur.next = node
def insert(self, position, item):
# 0位置插入,即插入头节点,调用add方法
if position == 0:
self.add(item)
# 向任意位置插入节点
elif 0 < position <= self.len():
node = Node(item)
count = 0
cur = self.head
while cur:
if position == count + 1:
# 插入节点
node.next = cur.next
cur.next = node
cur = cur.next
count += 1
# 范围控制,抛出越界异常
else:
raise 'index out of range'
def len(self):
cur = self.head
count = 0
# 遍历计数
while cur:
count += 1
cur = cur.next
return count
def travel(self):
# 取头元素
cur = self.head
while cur:
print(cur.item, end='-->')
cur = cur.next
print('None')
def remove(self, item):
# 当前节点
cur = self.head
# 存储当前节点的上一节点
cur_pre = None
while cur:
# 遍历到相等
if cur.item == item:
# 如果是头结点
if cur_pre is None:
self.head = cur.next
# 其他情况,删除当前节点
else:
cur_pre.next = cur.next
cur_pre = cur
cur = cur.next
def search(self, item):
cur = self.head
while cur:
# 找到返回true
if cur.item == item
return True
cur = cur.next
# 遍历结束,返回False
return False
注意:这是单链表的python实现,除此以外还有单向循环链表,双向链表等,可以参考自己实现,原理相同。