Python数据结构之链表(linked list)
链表简介
链表是由一系列的节点(node)来实现的,通过每一个node存储下一个节点的指针来实现一种快速的插入。此外每个节点都有一个cargo包含一定的数据。根据链表结构的不同,其种类可以分为单向链表、单项循环链表、双向链表、双向循环链表等。
代码实现
- 创建链表
由于链表的功能是依靠节点来完成的,所以链表的建立必然要先建立节点类。我们通过节点间传递值的方式将指针指向下一个节点。
- 链表的遍历
在创建完链表之后,可以通过输入第一个节点的方式遍历整个链表
- 链表的插入
在链表中插入一个元素指的是将指针从一个已经存在的节点指向一个新插入的节点。代码中只有左端和右端插入,中间插入也一样。
-
链表的删除
参考链表的遍历以及插入
# 创建一个新链表
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
self.nextval = None
class SLinkList:
def __init__(self):
self.headval = None
# 链表遍历
## 创建完链表之后,可以通过输入第一个节点的方式遍历整个链表
# 打印链表
def show(self):
printval = self.headval
while printval:
print(printval.dataval)
printval = printval.nextval
# 插入
# 在链表中插入一个元素指的是将指针从一个已经存在的节点指向一个新插入的节点。取决于不同的插入位置,主要有以下几种情形。
# 插入在链表开头
def add_left(self, newdata):
tem = self.headval
NewNode = Node(newdata)
self.headval = NewNode
NewNode.nextval = tem
# 在链表末尾添加一个新的node
def append_right(self, newdata):
NewNode = Node(newdata)
if self.headval is None:
self.headval = NewNode
laste = self.headval
while (laste.nextval):
laste = laste.nextval
laste.nextval = NewNode
链表案例
创建链表
li = SLinkList()
li.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node('Wed')
# 连接各个节点
li.headval.nextval = e2
e2.nextval = e3
# print(e2.nextval)
# #结果为e3内存地址<__main__.Node object at 0x0000001A0F9644BE0>
# print(e2.nextval.dataval)
# #结果为e3所代表的值Wed
# 链表的遍历
li.show()
# 链表的插入
li.add_left('sun')
li.append_right("Thu")