python 链表问题

发布于 2022-09-06 11:44:43 字数 1271 浏览 18 评论 0

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改变了呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

厌倦 2022-09-13 11:44:43

链表替换 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是前面的链表,后面的链表被断开了,完成了替换的目的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文