• Python 之简易单链表


    单链表的基本要素有 个,数据项和连接项。这两项在 Python 中可以通过对象及其属性来实现。

     

     1 class Node:
     2     def __init__ (self, data):
     3         self.data = data
     4         self.next = None
     5 
     6     def add (self, data):
     7         p = self
     8 
     9         while p.next != None:
    10             p = p.next
    11 
    12         p.next = Node (data)
    13 
    14     def subtract (self):
    15         p = self
    16 
    17         if p.next == None:
    18             print (r'Oh, I can't')
    19             return
    20 
    21         while p.next.next != None:
    22             p = p.next
    23 
    24         p.next = None 
    25 
    26     def show (self):
    27         p = self
    28 
    29         while p != None:
    30             print (p.data, end=' ')
    31             p = p.next
    32     

     

    >>> t = Node (1)
    >>> t.show ()
    1 
    >>> t.add (2)
    >>> t.show ()
    1 2 
    >>> t.subtract ()
    >>> t.show ()
    1 

    不过刚开始 add 是这样实现的:

    1 def add (self, data):
    2     p = self.next
    3 
    4     while p != None:
    5         p = p.next
    6 
    7     p = Node (data)

     

    最后测验无效,思考ing

    和 self 是什么关系?引用还是复制?

    查询了一下,Python 中一切变量皆是引用。(还有一句知名度较高:Python 中一切数据皆是对象)

    如果修改引用内容,分2种情况考虑:

      如果引用对象为不可变对象:

        创建新对象

      如果引用对象为可变对象:

        修改原对象

     

    而上面 add 失效,是因为 p = Node (data) 直接解了引用,而不是修改了原对象

     

    --data: 2015-05-25

     

  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/pycansi/p/4528318.html
Copyright © 2020-2023  润新知