链表是一种特殊的数据结构,是一种非连续存储的线性表,由多个节点组成,每个节点都包含了数据域和指针域,指针指向下一个节点,一个节点的指针指向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