链表是一种特殊的数据结构,是一种非连续存储的线性表,由多个节点组成,每个节点都包含了数据域和指针域,指针指向下一个节点,一个节点的指针指向None。使用Python实现链表操作的基本方法有:
1. 构造链表
构造链表的方法有两种:一种是从头结点开始,一种是从尾结点开始。
# 从头结点开始构造
class Node(object):
def __init__(self, data, next_node=None):
self.data = data
self.next_node = next_node
head = Node(1)
node2 = Node(2)
node3 = Node(3)
head.next_node = node2
node2.next_node = node3
# 从尾结点开始构造
tail = Node(3)
node2 = Node(2, tail)
head = Node(1, node2)
2. 读取链表
可以通过遍历链表的方式来读取链表中的所有节点,即从头节点开始,每次读取一个节点,直到读取到一个节点。
def read_list(head):
cur = head
while cur != None:
print(cur.data)
cur = cur.next_node
# 调用
read_list(head)
3. 插入节点
插入节点的方法有三种:在头结点后插入、在指定节点后插入、在尾节点后插入。
# 在头结点后插入
def insert_head(head, data):
new_node = Node(data)
new_node.next_node = head
return new_node
# 在指定节点后插入
def insert_after(node, data):
new_node = Node(data)
new_node.next_node = node.next_node
node.next_node = new_node
# 在尾节点后插入
def insert_tail(tail, data):
new_node = Node(data)
tail.next_node = new_node
return new_node
4. 删除节点
删除节点也有三种方法:删除头结点、删除指定节点、删除尾节点。
# 删除头结点
def delete_head(head):
head = head.next_node
return head
# 删除指定节点
def delete_node(node):
node.data = node.next_node.data
node.next_node = node.next_node.next_node
# 删除尾节点
def delete_tail(tail):
cur = head
while cur.next_node != tail:
cur = cur.next_node
cur.next_node = None
return cur
5. 查找节点
查找节点的方法有两种:根据节点值查找、根据节点位置查找。
# 根据节点值查找
def find_by_value(head, value):
cur = head
while cur != None and cur.data != value:
cur = cur.next_node
return cur
# 根据节点位置查找
def find_by_index(head, index):
cur = head
pos = 0
while cur != None and pos != index:
cur = cur.next_node
pos += 1
return cur