2013-03-07 124 views
3

我做雙向鏈表類。問題與實現雙向鏈表

def remove(self, item): 
    current=self.__head 
    prev=None 
    found=False 
    if(self.__size>=1): 
     for i in range (0,self.__size): 
      if(current.getData()==item): 
       found=True 
       pos=i#save the position to pop 
       i=self.__size#leave the loop 
      else: 
       prev=current 
       current=current.getNext() 

     if(found==True):#excute only if the item is found 
      if(prev==None):#first item found 
       if(self.__size==1): 
        self.__head==None 
        self.__tail==None 
        current.setNext(None) 
        current.setPrevious(None) 
       else:#size bigger than 2 
        self.__head==current.getNext() 
        current.setNext(None) 
      else: 
       if(current.getNext()==None):#last item found 
        self.__tail==prev 
        current.setPrevious(None) 
        prev.setNext(None) 
       else: 
        Next=current.getNext() 
        current.setNext(None) 
        current.setPrevious(None) 
        Next.setPrevious(prev) 
        prev.setNext(Next) 
      self.pop(pos) 
      self.__size-=1 

這就是我到目前爲止所做的。如果我運行下面

​​

代碼這些是輸出,我得到

0 

1 

2 

3 

4 3 

5 4 3 

6 5 4 3 

7 6 5 4 3 

8 7 6 5 4 3 

9 8 7 6 5 4 

我期待第一4行(0〜3),以顯示任何和從第五個爲4,第6個爲5 4 ....等等。

最後我想9 8 7 6 5 4

如何修復代碼?問題的

回答

2

部分是在你的if語句的for循環的第一部分:

for i in range (0,self.__size): 
     if(current.getData()==item): 
      found=True 
      pos=i#save the position to pop 
      i=self.__size#<--- doesn't leave the loop 
     else: 
      prev=current 
      current=current.getNext() 

設置i=self.__size不退出循環。改爲使用break

這使得它,這樣當你發現你不斷通過循環迭代和current是不是你要刪除的項目的項目。相反current是,你看看for循環的最後一個節點的值。

而且使用的是==時,我敢肯定你的意思等等這些分配行=

self.__head==None #should be self.__head=None 
self.__tail==None #should be self.__tail=None 
current.setNext(None) 
current.setPrevious(None) 

變化==到一個=。我想你在你的if(found==True):區塊做了幾次。這些行只是評估布爾表達式並將其丟棄。

改變這些東西,讓我知道是否能解決它。

而且,只是有一些小技巧:

如果你有一個布爾變量(如found)你不需要檢查found==True,因爲它的計算結果爲相同的值只是found。即:

if(found==True): 
    ... 

是一樣的:

if(found): 
    ... 
+0

謝謝soooooo多爲你help..I'll現在嘗試。 – 2013-03-07 04:32:44

+0

,完美工作!再次,謝謝你 – 2013-03-07 04:42:05