Python 链表的实现

本文深入讲解了Python中链表的概念及其实现,包括节点的定义、链表的基本操作如添加、删除、插入和遍历等,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 链表

首先,我们先来了解一下链表:

在线性表中,有一种叫做顺序存储结构,但是在插入和删除的时候需要移动大量的元素,不是很方便,为了解决这个问题,就有了链式存储结构:

为了表示每个数据元素a与其直接后继数据元素b之间的逻辑关系,对数据元素a来说,除了存储其本身的信息之外,还需存储一个指示其后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部分信息组成数据a的存储映像,称为节点(Node)。
N个结点链结成一个链表,即为线性表的链式存储结构,因此此链表的每个结点中只包含一个指针域,所以叫做单链表。

Python 单链表的实现

# 链表中的节点
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


# 链表:管理节点
class Link:
    def __init__(self):
        # 表头:链表中的第一个节点
        self.head = None

    # 在头部添加
    def add(self, item):
        # 创建一个节点
        node = Node(item)
        # 判断链表是否为空
        if self.head:
            # 新节点作为第一个节点,它的next属性指向原来的表头
            node.next = self.head
        # 新节点作为表头
        self.head = node

    # 在末尾追加
    def append(self, item):
        # 创建节点
        node = Node(item)
        if self.head:
            temp = self.head
            while temp.next:
                temp = temp.next
            temp.next = node
        else:
            self.head = node

    # 在指定位置插入节点
    def insert(self, position, item):
        if position <= 0:
            self.add(item)
        elif position >= self.length():
            self.append(item)
        else:
            node = Node(item)
            count = 0
            temp = self.head
            # 找到要插入位置的前一个节点
            while count < position-1:
                temp = temp.next
                count += 1
            # 新的节点的next指向下一个节点
            node.next = temp.next
            # 当前节点的next指向新节点
            temp.next = node

    # 删除元素
    def remove(self, item):
        # 记录前一个节点
        prev = None
        temp = self.head
        while temp:
            if temp.data == item:
                prev.next = temp.next
                break
            else:
                prev = temp
                temp = temp.next

    # 统计链表长度
    def length(self):
        count = 0
        if self.head:
            temp = self.head
            while temp:
                temp = temp.next
                count += 1
        return count

    # 遍历链表
    def show(self):
        temp = self.head
        while temp:
            print(temp.data)
            temp = temp.next


# 创建链表
link = Link()

# 添加节点
link.add(1)
link.add(2)
link.add(3)
link.add(4)

# 在末尾追加
link.append(5)
link.append(6)

# 在指定位置插入
link.insert(3, 100)

# 删除指定节点
# link.remove(100)

# 遍历链表
link.show()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值