我是鲁比的新手.请原谅我问了这么简单的问题.

虽然我知道Ruby doesn’t include a LinkedList class so we need to create our own,因此我创建了我自己的类,如下所示:


class Node
    attr_accessor :data, :next
    def initialize(data, next_node = nil)   
        @data = data
        @next = next_node
    end
end

class Linkedlist

    def empty?
        @head == nil  
    end

    def size
        count = 0
        if self.empty?
            return count
        else
            current_node = @head
            while current_node.next !=nil
                count += 1
                current_node = current_node.next
            end
            return count
        end
    end
        
    ...
    ...

    def add
        if self.empty?
            @head = Node.new(data)
        else
            while current_node.next != nil
                current_node = current_node.next
            end
            current_node.next = Node.new(data)
        end
    end
end

我对size呼叫的实现清楚地显示了O(n)的时间复杂性.当查看这answer中的Java实现时,Java似乎跟踪linked list的大小,因此大小调用的时间复杂度是O(1).

我如何使用ruby来实现这一点?

推荐答案

Class Linkedlistattr_accessor :size相加,然后在add方法中操作size,如下所示:

class Linkedlist
    attr_accessor :size

    def add
        if self.empty?
            @head = Node.new(data)
        else
            while current_node.next != nil
                current_node = current_node.next
            end
            current_node.next = Node.new(data)
        end
        modify_size("add")
    end

    def remove
        .
        . 
        # after removing node
        modify_size("remove")
        return removed_node
    end

    def modify_size(arg)
        case arg
        when 'add'
            self.size += 1
        when 'remove'
            self.size -= 1
        else
        end
    end

end

l1 = Linkedlist.new.add(1)
puts l1.size

Ruby相关问答推荐

数组上的Ruby#unionreact 非常奇怪

为什么在if语句中的赋值操作不会在条件判断之前发生?

如何返回此 OOP Ruby 代码最后一行中的变量?

厨师从源代码安装和更新程序

如何在加载文件时禁用重新定义常量的警告

Sinatra + Bundler?

Ruby检测方法

如何从 Ruby 中的线程返回值?

如何调试/显示使用 RestClient 发送的请求

Ruby:如何卸载设计(uninstall Devise)?

如何判断 Capistrano 中是否存在文件(在远程服务器上)?

如何在不按 Enter 的情况下获取单个字符?

在 Ruby 中创建数字、字符串、数组或哈希的 md5 哈希

如何获取符号链接的目标?

确定一个值是否存在于哈希数组中

如何将哈希键转换为方法名称?

Ruby 删除目录

何时使用在 Ruby 中启动子进程的每种方法

OpenSSL vs GPG 用于加密异地备份?

以小时为单位的时差