私はRubyで単独のLinkedListクラスを作成しました。 リンクされたリストを逆転しようとするまでうまくいった。Ruby LinkedList実装で変数/ポインタを理解するのが難しい
それは、この方法でのLinkedListを逆転しませんが、私はそれだけで正常に動作left_tmp = @headで逆方法、後head.next = nilの @ を追加するとき。
私はそれを追加したときになぜ機能するのか分かりませんでした。誰か説明がありますか?
私はかなり新しいルビーですので、「グッドプラクティスルビー」以外のものがあるかどうか私に教えてください。
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
あなたが正しいですが、私はすでにメソッドの最後の行で@head変更します。最後の行では、left_tmpはリンクされたリストの中で最後にnext = nilの値を指しています。 – tackleberry
最後の行では、 'left_tmp.next'は' nil'ではありません。したがって、(元のリンクされたリスト内の)第1のノードの「次のポインタ」は決して変更されない。 –
'left_tmp'(最後の行)は、元々リンクリストの最後のノードを指し、逆転時に最初のノードになりました。 'next'ポインタはもはや' nil'を指していません。 –