2013-01-14 43 views
3

好了一個賦值的問題說創建一個有序的雙向鏈表......這樣每個對象的詞典上就會有更小的名字出現在「Before」之前......另一個......就像Dictionary中的名字......也是同名對象可以按任何順序排列...Ordered Doubly List

要連結兩個對象我有setBefore()setAfter()方法...... ,我已經做了這麼多...但還是不知道在哪裏,我做錯了..可以從你們一點點的指導可以幫助我...

atMe是已經存在於雙向鏈表中的對象,newFrob是一個對象插入...

def insert(atMe, newFrob): 
    if newFrob.myName() < atMe.myName(): 
     if atMe.getBefore() == None: 
      atMe.setBefore(newFrob) 
      newFrob.setAfter(atMe) 
     elif atMe.getBefore().myName()<newFrob.myName(): 
      atMe.getBefore().setAfter(newFrob) 
      newFrob.setBefore(atMe.getBefore) 
      atMe.setBefore(newFrob) 
      newFrob.setAfter(atMe) 
     else: 
      insert(atMe.getBefore(),newFrob) 

    elif newFrob.myName() > atMe.myName(): 
     if atMe.getAfter() == None: 
      atMe.setAfter(newFrob) 
      newFrob.setBefore(atMe) 
     elif atMe.getAfter().myName()>newFrob.myName(): 
      atMe.getAfter().setBefore(newFrob) 
      newFrob.setAfter(atMe.getAfter) 
      atMe.setAfter(newFrob) 
      newFrob.setBefore(atMe) 
     else: 
      insert(atMe.getAfter(),newFrob) 

    elif newFrob.myName()==atMe.myName(): 
     if atMe.getAfter() != None: 
      newFrob.setAfter(atMe.getAfter()) 
     newFrob.setBefore(atMe) 
     if atMe.getAfter() != None: 
      atMe.getAfter().setBefore(newFrob) 
     atMe.setAfter(newFrob) 

,這是將要使用的FROB類...

class Frob(object): 
    def __init__(self, name): 
     self.name = name 
     self.before = None 
     self.after = None 
    def setBefore(self, before): 
     self.before = before 
    def setAfter(self, after): 
     self.after = after 
    def getBefore(self): 
     return self.before 
    def getAfter(self): 
     return self.after 
    def myName(self): 
     return self.name 

這裏之前,並鏈接左右對象雙向鏈表... 對象後從這個類將被插入到雙向鏈表...

例子:

a=Frob('foo') 
b=Frob('bar') 
c=Frob('frob') 
d=Frob('code') 

code        output 
insert(a,b)     bar->foo 
insert(a,c)     bar->foo->frob 
insert(b,d)     bar->code->foo->frob 

現在假設

code        output 
insert(b,Frob('code'))  bar->code->code->foo->frob 
+3

@downvoters:請解釋。正如我所看到的,OP已經明確提出了這個問題,盡其所能,儘管他找不到解決方案並需要幫助。他可能不太擅長Python,但我們應該幫助他而不是downvoting。 – Abhijit

+3

請解釋你的意思_exactly_有序雙鏈表?解釋它應該如何工作,它應該實施什麼方法...等等等等...... –

+0

@eumiro謝謝...但仍然沒有改進... – adil

回答

3

的問題是在這條線(當你移動的另一方向形成等價):

newFrob.setBefore(atMe.getBefore) 

你錯過atMe.getBefore後的括號,所以您最終將綁定方法本身傳遞給newFrob.setBefore而不是該方法返回的值。這是一個簡單的錯字,所以我不會因爲錯過任務而感到不快。

我試圖插入下列順序和檢查值(我已經總結與評價工作確定的那些)中發現的錯誤:

>>> a = Frob("a") 
>>> b = Frob("b") 
>>> c = Frob("c") 
>>> d = Frob("d") 
>>> insert(a, b) # list is a<->b 
>>> insert(a, d) # list is a<->b<->d 
>>> insert(a, c) # list is a<->b<->c->? 
>>> c.getAfter() 
<bound method Frob.getAfter of <__main__.Frob object at 0x000000000318EBA8>> 

末提到,對象是b,這導致我找到代碼中的錯誤。