在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/人工智能  Python/ python 鏈表問(wèn)題

python 鏈表問(wèn)題

class Node(object):    #節(jié)點(diǎn)類
    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 #將新節(jié)點(diǎn)的pnext指向索引位置的pnext 
                    node.pnext = newnode #????        

這個(gè)是我在網(wǎng)上搜索到的算法,有個(gè)地方不是很明白。
。
都沒(méi)有修改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也沒(méi)有讓self.name改變呀?
為什么上面修改node就能讓self.head改變了呢?

回答
編輯回答
乖乖瀦

鏈表替換 node->newnode->node.pnext.pnext 把node.pnext 替換為newnode

原來(lái)是 ...->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是前面的鏈表,后面的鏈表被斷開了,完成了替換的目的

2017年5月19日 07:52