单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
单链表函数
- is_empty() 链表是否为空
- length() 链表长度
- before_add(item) 链表头部添加元素
- end_end(item) 链表尾部添加元素
- remove(item) 删除节点
- travel() 遍历整个链表
# -*- ecoding: utf-8 -*-
# @ModuleName: list
# @Function: 单链表
class CreatNode(object):
# 创建节点
def __init__(self, item):
self.item = item
self.next = None
class linklist(object):
# 链表操作
def __init__(self):
self.head = None
def is_empty(self):
# 判断链表是否为空
if self.head is None:
return True
else:
return False
def length(self):
# 输出链表长度
if self.head is None:
return 0
else:
cur = self.head
count = 1
while cur.next:
count += 1
cur = cur.next
print('linklist length: {}'.format(count))
def before_add(self, item):
# 头插法
newnode = CreatNode(item)
if self.is_empty():
self.head = newnode
else:
temp = self.head
newnode.next = temp
self.head = newnode
def end_add(self, item):
# 尾插法
newnode = CreatNode(item)
if self.is_empty():
self.head = newnode
else:
cur = self.head
while cur.next:
cur = cur.next
cur.next = newnode
def remove(self, item):
# 删除元素
pre = self.head
flag = False
if pre.item == item:
self.head = pre.next
flag = True
else:
cur = pre.next
while cur:
if cur.item == item:
pre.next = cur.next
cur = cur.next
flag = True
break
else:
pre.next = cur
cur = cur.next
if flag:
print('values:{} 已删除'.format(item))
else:
print('values:{} 不存在链表中'.format(item))
def travel(self):
# 遍历元素
cur = self.head
print('linklist values:')
while cur:
print(cur.item, end=' -> ')
cur = cur.next
print('Null')
if __name__ == '__main__':
L1 = linklist()
L1.end_add(1)
L1.end_add(2)
L1.end_add(3)
L1.before_add(5)
L1.remove(5)
L1.remove(2)
L1.travel()
L1.length()
运行结果