python实现单链表 判空 长度 遍历 头插 尾插 插入 删除 范围查询 反转

这篇博客记录了作者在复习数据结构时,使用Python实现单链表的过程,包括判空、计算长度、遍历、头插、尾插、插入、删除和范围查询以及反转等操作。文章强调了如何抽象链表结构并用面向对象的方式进行设计,同时也提到了Python中变量赋值涉及到的内存地址概念。此外,还提及了相关双链表的实现和数据结构与算法的基础知识。
摘要由CSDN通过智能技术生成

提示: 是我尝试去复习的过程中, 思路的步骤, 看起来有点像草稿, 后期如果有空加上文字描述说明我的思考过程

在网上看了一些别的实现思路, 我觉得最难的其实是怎么去 抽象 我们要描述的 链表 等数据结构对象, 把它们根据在 内存中实际的存储方式 进行抽象. 这里最终是抽象成 Node 和 SingleLinkList 两个对象, 前者作为后者的 一个属性, 这属于 面向对象的多态. 最终, 暴露给用户的只是 对数据的操作而不是 Node对象.
中间让我感觉比较绕的是, 根据python中引用的思路, 去理解变量的赋值过程, 也就是说. 让上一个节点指向下一个节点, 本质上是指向的是下一个节点的内存地址.

# *-* coding:utf8 *-*


# class Node(object):
#
#     def __init__(self, item=None, next=None):
#         self.item = item
#         self.next = next
#
#
# class SingleLinkList(object):
#
#     def __init__(self, node=None):
#         self.node = node
#
#     def travel(self):
#         while self.node.next is not None:
#             print(self.node.item)
#
#
# tail = Node(item=300, next=None)
# node2 = Node(item=200, next=tail.item)
# node1 = Node(item=100, next=node2.item)
# head = Node(next=node1.item)
#
# single_link_list = SingleLinkList(node=head)
# single_link_list.travel()


class Node(object):

    def __init__(self, data=None):
        """
        初始化操作,构造一个节点
        :param data: 当前节点要保存的数据
        """
        self.data = data  # 节点数据区,要保存的数据
        self.next = None  # 节点地址区,指向的下一个区域的地址信息; 默认可以设置为None,表示起始没有头信息


class SingleLinkList(object):
    """单向链表(单链表)"""

    def __init__(self, head_node=None):
        """对于单链表来说,只需要保存 头节点 的信息即可"""
        self.__head = head_node

    # 下面实现,单链表中封装的 操作数据的方法
    def is_empty(self):
        """链表是否为空"""
        # if self.__head is None:
        #     return True
        return self.__head is None

    def length(self):
        """链表的长度"""
        # 借助两个 辅助变量
        cur = self.__head  # 初始化游标指向头节点
        count = 0  # 初始长度设置为0
        while cur is not None:
            count +=</
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值