python实现单链表的增、删、改、查

下面的介绍主要基于单链表进行的程序编写。

单链表结构:

链表的增删改查函数如下:

class SinLinkedList:

    # 节点的数据结构,包含一个值和一个指针
    class Node:
        __slots__ = {'_element', '_next'}

        def __init__(self, element):
            self._element = element
            self._next = None

    # head表示头节点,tail用于尾插法
    # 初始化时头节点的值设置为空,头节点的下一个也是空
    def __init__(self):
        self._head = self.Node(None)
        self._tail = self._head
        self._size = 0

    def is_empty(self):
        return self._size == 0

    # 头插法创建链表,输出的数是输入的逆序
    # 头插法就是将数据始终插入头节点后面
    def add_node_head(self, e):
        Node = self.Node(e)
        Node._next = self._head._next
        self._head._next = Node
        self._size += 1

        return self._head

    # 尾插法创建链表,输出的数是输入的逆序
    # 头插法就是将数据始终插入头节点后面
    def add_node_tail(self, e):
        Node = self.Node(e)
        self._tail._next = Node
        self._tail = Node
        self._size += 1

        return self._tail

    # 删除链表的某一个元素
    # 删除元素,需要知道至少两个节点指针,这样才能将所删元素跳过
    def remove_node(self, e):
        pre_node = self._head
        now_node = self._head._next
        while now_node is not None:
            if now_node._element == e:
                pre_node._next = now_node._next
                now_node = pre_node._next
            else:
                pre_node = now_node
                now_node = now_node._next

    # 查找节点是否存在,存在返回True,不存在返回False
    def search_node(self, e):
        now_node = self._head
        while now_node._next is not None:
            if now_node._next._element == e:
                return True
            now_node = now_node._next
        return False

    # 输出链表节点
    # 如论何时,链表最好保持头节点指针不动,所以下面now_node = self._head
    def print_link_node(self):
        now_node = self._head
        while now_node._next is not None:
            print(now_node._next._element, end='-->')
            now_node = now_node._next
        print('None')

验证函数:

from seventh_chapter.LinkList import SinLinkedList

link = SinLinkedList()


def create_link_head():
    for i in range(0, 6):
        link.add_node_head(i)


def create_link_tail():
    for i in range(0, 6):
        link.add_node_tail(i)


if __name__ == '__main__':
    # create_link_head()
    # 尾插入创建链表
    create_link_tail()
    link.print_link_node()
    # 删除链表的节点值为4的节点
    link.remove_node(4)
    link.print_link_node()
    # 查找节点值为5的节点是否存在
    print(link.search_node(5))

输出结果:

0-->1-->2-->3-->4-->5-->None
0-->1-->2-->3-->5-->None
True

如有不当或疑惑,请各位看官留言指出,谢谢

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楊木木8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值