2013-03-22 97 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实例