2017-06-12 65 views
-1

所以我寫了一個鏈表類,其中一個需要的函數是插入到某個位置。這是很簡單的,我必須爲它編寫的代碼,但我也放在一起的錯誤設置,以防止他人試圖指數在添加元素,是不是有:Python似乎忽略了這個類中的if語句。這是怎麼回事?

def insert_element_at(self, data, position): 
    position=position-1 #gets around the difference between indexing and the way we count things 
    if position >= self.size: 
     print("Error: Index larger than current list size") 
     return 
    newnode=self.Node(data) 
    current=self.header 
    for i in range (0, position): 
     current=current.nextnode 
    newnode.nextnode=current.nextnode 
    current.nextnode=newnode 
    self.size=self.size+1 

我覺得像這樣的應該工作,但是每當我嘗試插入一個大於列表大小的元素時,代碼就會試圖一直工作到列表的末尾(或通過它) - 它試圖粘貼將數據導入不存在的節點。我得到這個錯誤:'NoneType'對象沒有'nextnode'屬性。

而且這是有道理的,但它應該不會去那麼遠。我怎樣才能解決這個問題?

下面是完整的代碼,用於上下文:https://pastebin.com/wgTLWWsx

+0

你不守'nextnode'和'在此方法和其他方法中,「previousnode」鏈接同步。 – user2357112

+0

恐怕我不太清楚你的意思。至少,這部分代碼是我確信應該工作的唯一代碼之一,因爲它是我們的教師給予我們的功能的直接改編。 – Wilhelm3

+0

代碼的這一部分不會做任何事情來更新'previousnode'鏈接,所以不行,它不起作用。它可能適用於單鏈表,但你的鏈接是雙鏈接的。 – user2357112

回答

0

也許那個位置從0和大小開始從1問題,所以位置爲4,大小爲5

+0

大小應該從0開始,但是,對不對?這就是它在最初的構造函數中的樣子。 – Wilhelm3

+0

並且位置也從0開始,爲什麼在比較之前減少1呢? – vZ10

+0

噢,那是因爲如果有人說他們想要在列表的第二項中放入某些東西,他們就會放入2.但是索引[2]不是第二項的位置 - 這將是索引[1]。因此減法。 – Wilhelm3