3

以下是 ruby​​ 中的 Circular double LL 实现。我对 ruby​​ 很陌生(不到几天),所以我为 node.js 做了一个复杂的结构。删除线

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)
        temp=@sentinel
        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)
        temp=@sentinel.n
        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

任何帮助表示赞赏。

4

1 回答 1

1

看Cdll插入方法。

 def insert(ele)
   temp=@sentinel
   # @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 类的新实例时 - 您还创建了 Node 的实例,其中上一个和下一个元素是 Cdll 的实例(不是 Node,其中p=存在方法)。

我认为它实际上不是双链表。也许节点中的 prev 和 next 元素也应该是一个Node实例

于 2013-03-23T01:37:10.570 回答