zoukankan      html  css  js  c++  java
  • python使用单链表节点类

    节点变量会初始化为None值或者一个新的None对象。

    class Node(object):
        def __init__(self, data, next=None):
            self.data = data
            self.next = next
    
    # 仅仅是空链接
    node1 = None
    
    # 一个包含数据和空链接的节点
    node2 = Node("A")
    
    # 一个包含数据和链接node2的节点
    node3 = Node("B", node2)

    下图表示在运行该节点之后3个变量的状态:

    注意如下情况:

    1. node1没有指向节点对象(是None)。
    2. node2和node3指向所链接到的对象。
    3. node2指向一个对象,其下一个指针为None。

    现在,假设你试图运行如下的语句,在已经包含了node2和node3的链接结构的开头位置添加一个节点:

    node1.next = node3

    python会抛出一个AttributeError作为响应。作出这一响应的原因是,变量node1包含了值None,因此不会引用包含了一个next字段的对象。

    要创建我们想要的链接,如下:

    node1 = Node("c", node3)

    或者,如下:

    node1 = Node("c")
    node1.next = node3

    通常在尝试访问一个给定的节点变量之前。我们可以通过询问其是否为None。从而保证其不发生意外:

    if nodeVariable != None:
        <access a field in nodeVariable>

    像数组一样,链表结构也是用循环来处理的。可以使用循环来创建一个链表结构,并且访问其中的每一个节点。

    下面是测试脚本使用了Node类来创建一个单链表结构,并且输出其内容:

    # coding: utf-8
    class Node(object):
        def __init__(self, data, next=None):
            self.data = data
            self.next = next
    
    
    head = None
    
    for count in range(1,6):
        head = Node(count, head)
    
    
    while head != None:
        print head.data
        head = head.next

    关于这个程序,注意以下几点:

    • 指针head生成了链表结构。这个以这样一种方式操作,最近插入的项总是位于结构的开始处。
    • 因此,当显示数据的时候,他们按照插入时相反的顺序出现。
    • 此外,当显示数据的时候,head指针重新设置为下一个节点直到head指针变为None。因此,这个过程的最后,节点实际上从链表结构中删除了。对于顺序来说,节点不可再用,并且会在下一次垃圾回收的时候回收。

     结束!

  • 相关阅读:
    方维分享系统,分享的用户得到商品的佣金
    方维采集失败,方维后台采集不了怎么办
    thinkphp 的 URL 中的 & 被转义成了 &amp; 成了死链接
    PHP用curl采集天猫详细页
    xampp1.8.3 配置 php5.x 访问 SQL Server 2008
    ArcGIS 10 线转点 polyline to points
    使用BCP从Sybase远程数据库中导出数据
    百度UEditor添加视频 增加支持“通用代码”功能,支持微信
    firefox修改user-agent
    Twitter Storm学习笔记
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13610346.html
Copyright © 2011-2022 走看看