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。因此,这个过程的最后,节点实际上从链表结构中删除了。对于顺序来说,节点不可再用,并且会在下一次垃圾回收的时候回收。

     结束!

  • 相关阅读:
    HDU2037
    python爬取邮箱
    HDU1058
    opengl 光照
    HDU1421
    <cocos2dx for window phone>一个简单的打地鼠游戏
    <cocos2dx for wp7>使用cocos2dx制作基于Tile地图的游戏:加入敌人和战斗(三)
    <WP7>(五)手把手教你写天气预报程序:ApplicationBar的使用和ListPicker的数据绑定
    <cocos2dx for wp7>在cocos2dx里面手势识别
    <cocos2dx for wp7>使用cocos2dx制作基于Tile地图的游戏:碰撞检测和收集物品(二)
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13610346.html
Copyright © 2011-2022 走看看