Python数据结构系列——Python 单向链表,支持负数索引、切片索引、for迭代访问、闭环位置查找,适用LintCode刷题练习

本文介绍如何在Python中实现一个单向链表,该链表支持正负数索引、切片操作以及for循环迭代访问。同时,还讲解了在链表中进行闭环位置查找的方法,适合用于LintCode等刷题平台的练习。

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

# -*- coding:utf8 -*-
# qxsoftware@163.com
# Python 单向链表,支持负数索引、切片索引,支持迭代访问,支持闭环检测
# https://blog.youkuaiyun.com/liuqixuan1994/article/details/103789486

from collections import Iterable
from warnings import warn


class ListNode(object):
    """链表结点"""

    def __init__(self, val, next=None):
        self.val = val
        self.next = next

    def __repr__(self):
        return str(self.val)


class LinkedList(object):
    """Python单向链表"""

    def __init__(self, data=None):
        if data is None:
            self.head = None
            self.__length = 0  # 长度为私有属性,外部不可修改,仅能通过len()运算符读取
        elif isinstance(data, ListNode):
            self.head = data
            self.__length = 1
        elif isinstance(data, Iterable):
            self.head = None
            self.__length = 0
            for v in data:
                self.append(v)
        else:
            self.head = ListNode(data)
            self.__length = 1

    def isEmpty(self):
        return (self.__length == 0)

    def append(self, valOrNode):
        """在当前链表的末尾追加元素。"""
        elem = None
        if isinstance(valOrNode, ListNode):
            if valOrNode.next is not None:
                warn("valOrNode.next is not None, new ListNode will be cloned. "
                     "If you want to append all follow-up nodes, please use 'extend'.")
                elem = ListNode(valOrNode.val)
            else:
                elem = valOrNode
        else:
            elem = ListNode(valOrNode)
        elem.next = None  # 截断可能存在的后续

        if self.head is None:
            self.head = elem
        else:
            node = self.head
            while node.next:
                node = node.next
            node.next = elem
        self.__length += 1

    def extend
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值