私はrubyを使用して単一のLinkedListクラスを作成しました。リンクリストを逆にしようとするまで、すべてがうまくいきました。
このメソッドではリンクリストを逆にしませんが 、逆メソッドでleft_tmp =@headの 後に@head.next= nilを追加すると、正常に機能します。
それを追加するとなぜそれが機能するのか理解できませんでしたが、誰か説明がありますか?
ところで、私はルビーにかなり慣れていないので、「Rubyのグッドプラクティス」ではないことが他にあるかどうか、遠慮なく教えてください。
クラスと関連するメソッドは次のとおりです。
class LlNode
attr_reader :data
attr_accessor :next
def initialize(val=nil)
@data = val
@next = nil
end
def to_s
"node_data=#{@data}"
end
end
class LinkedList
def initialize
@list = []
@head = LlNode.new
end
def insert(val)
n = LlNode.new val
# List is empty
if is_empty?
@head = n
else
n.next = @head
@head = n
end
self
end
def reverse
return if is_empty? or @head.next.nil?
curr = @head.next
right_tmp = curr.next
left_tmp = @head
while curr != nil
curr.next = left_tmp
left_tmp = curr
curr = right_tmp
right_tmp = right_tmp.next unless right_tmp.nil?
end
@head = left_tmp
end
end