python 链表问题

monsterzzz
  • 131
class Node(object):    #节点类
    def __init__(self,data):
        self.data = data 
        self.pnext = None
class linklist(object): #单链表
    def __init__(self):
        self.head = None
        self.length = 0
    def updata(self,value,index): 
        newnode = Node(value) #将值改为node类型
        if type(index) is int:
            if index > self.length -1:
                pass
            else:
                if index == 0:
                    newnode.pnext = self.head.pnext
                    self.head = newnode
                else:  #遍历链表
                    node = self.head
                    while index - 1 : #遍历到索引的位置
                        node = node.pnext
                        index = index - 1
                    newnode.pnext = node.pnext.pnext #将新节点的pnext指向索引位置的pnext 
                    node.pnext = newnode #????        

这个是我在网上搜索到的算法,有个地方不是很明白。

都没有修改self.head的值 为什么就直接能修改链表了呢?
node不只是self.head的拷贝吗?

class A:
    def __init__(self,name):
        self.name = name
    def sayname(self):
        ww = self.name
        ww = '1'
        print(self.name)
        print(ww)

a = A('qq') #qq
a.sayname() #1

在这段代码里面我修改了ww也没有让self.name改变呀?
为什么上面修改node就能让self.head改变了呢?

回复
阅读 1.1k
1 个回答

链表替换 node->newnode->node.pnext.pnext 把node.pnext 替换为newnode

原来是 ...->node->node.pnext->node.pnext.pnext->... 以下前后省略
第一句话 newnode.pnext = node.pnext.pnext
变成 ...->node->node.pnext->node.pnext.pnext->...和 newnode.pnext->node.pnext.pnext->...
第二句话 node.pnext = newnode
变成 ...->node->newnode->node.pnext.pnext->... 和 node.pnext->node.pnext.pnext->...
所以self.head是前面的链表,后面的链表被断开了,完成了替换的目的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏