2016-02-05 36 views
0

我想插入項目對(字母,頻率)到一個有序的鏈接列表。到目前爲止,我能夠創建排序的鏈表,但我無法弄清楚如何更新頻率並重新排列列表,如果一封信得到兩次。插入到有序的鏈接列表Python和總和重複

到目前爲止,我有:

def add(self, letter, frequency): 

    temp = Frequency(letter, frequency) 

    curr = self.head 
    prev = None 
    stop = False 

    while curr != None and not stop: 
     if curr.frequency < temp.frequency: 
      stop = True 
     else: 
      prev = curr 
      curr = curr.next 

    if prev == None: 
     temp.set_next(self.head) 
     self.head = temp 
    else: 
     temp.set_next(curr) 
     prev.set_next(temp) 

f = SortedFrequencyList() 
f.add('a', 3) 
f.add('b', 5) 
f.add('g' 1) 

回報

({b: 5}, {a: 3}, {g: 1}) 

但如果我是做

f = SortedFrequencyList() 
f.add('a', 3) 
f.add('b', 5) 
f.add('g', 1) 
f.add('a', 3) 

我得到

({b: 5}, {a: 3}, {a: 3}, {g: 1}) 

代替

({a: 6}, {b: 5}, {g: 1}) 
+0

關於總和和重排,你試過了什麼? – ppperry

+0

你有同樣的項目,這個?http://stackoverflow.com/questions/7453939/adding-to-a-linked-list – FBruynbroeck

+0

是的。這是確切的一個 – Mikey

回答

2

我們不能做編碼的幫助,因爲你還沒有發佈您的支持代碼的方式很多:我們沒有足夠的重現該問題。你也沒有給我們任何工作的編碼嘗試。

您需要建立更多的鏈接列表支持。到目前爲止,您所擁有的只是一個將新條目插入列表的方法。我建議您編寫一個查找方法,該方法通過名稱(字母)查找現有元素,並找到更新,這樣可以找到它,增加頻率並將其重新排列到列表中。

構建塊更新的方法是編寫刪除例程。找到該項目,保留副本,刪除它從列表中,然後添加一個新的頻率更新。

更新更好的方法是在一個例程中執行刪除和重新插入,備份列表。這表明了遞歸內存或雙向鏈表。更快的方法是實現某種索引樹結構,以便搜索速度更快。

這是否讓你朝着正確的方向前進?

+0

是的。這真是太好了。謝謝:) – Mikey

+0

你會介意快速跳入聊天室來進一步討論嗎?我有基本的實施,我只需要一隻手鞏固它 – Mikey

+0

當然...讓我知道如何到達那裏。 – Prune