2013-03-22 85 views
3

以下是ruby中的循環雙LL實現。我對ruby(少於幾天)非常陌生,所以我爲節點製作了一個複雜的結構。 刪除線ruby​​未定義方法錯誤p =方法不退出

temp.n.p=temp2 

使錯誤消失,但否則它遇到以下錯誤: -

/home/ghost/Desktop/ruby/ds/test.rb:40:in `insert': undefined method `p=' for #<Cdll:0x000000022bfde8> (NoMethodError) 
    from /home/ghost/Desktop/ruby/ds/test.rb:60:in `<main>' 

這裏是整個代碼: -

class Node 
    def initialize(a,b,c) 
     @data=a 
     @next=b 
     @prev=c 
    end 
    def d=(ele) 
     @data=ele 
    end 
    def n=(ele) 
     @next=ele 
    end 
    def p=(ele) 
     @prev=ele 
    end 
    def d 
     @data 
    end 
    def p 
     @prev 
    end 
    def n 
     @next 
    end 


end 

class Cdll 
    def initialize 
     @sentinel=Node.new(nil,self,self) 
    end 

    def insert(ele) 
     [email protected] 
     while temp.d!=nil 
      temp=temp.n 
     end 
      temp2=Node.new(ele,temp,temp.n) 
      temp.n .p=temp2 
      temp.n=temp2 
    end 


    def search(ele) 
     [email protected] 
     while temp.d!=nil 
      if(temp.d==ele) 
       return temp 
      else 
       temp=temp.n 
      end 
     end 
     return nil 
    end 
end 


c=Cdll.new 
c.insert(12) 
c.insert(14) 
if((x=c.search(14))!=nil) 
    puts x.d 
end 

任何幫助表示讚賞。

回答

1

看看Cdll的插入方法。

def insert(ele) 
    [email protected] 
    # @sentinel.n == self 
    # => true 
    while temp.d!=nil 
    temp=temp.n 
    end 
    temp2=Node.new(ele,temp,temp.n) 
    # temp.n == self 
    # => true 
    temp.n.p=temp2 
    temp.n=temp2 
end 

當你創建Cdll新的類實例 - 你還可以創建節點的實例,其中一個和下一個元素是Cdll(未節點,其中方法p=存在)的實例。我想這不是雙鏈表。也許節點中的prev和next元素也應該是Node實例