在下面的突變示例中,我不明白鏈接列表是如何反轉的。如何在Ruby中反轉鏈接列表
class LinkedListNode
attr_accessor :value, :next_node
def initialize(value, next_node=nil)
@value = value
@next_node = next_node
end
end
def print_values(list_node)
print "#{list_node.value} --> "
if list_node.next_node.nil?
print "nil\n"
return
else
print_values(list_node.next_node)
end
end
def reverse_list(list, previous=nil)
current_head = list.next_node
list.next_node = previous
if current_head
reverse_list(current_head, list)
else
list
end
end
node1 = LinkedListNode.new(37)
node2 = LinkedListNode.new(99, node1)
node3 = LinkedListNode.new(12, node2)
print_values(node3)
puts "-------"
revlist = reverse_list(node3)
print_values(revlist)
如果我只是返回current_head
,我得到99->37->nil
,這是有道理的,因爲99
將next_node
。返回下一行,
list.next_node = previous
引發錯誤因爲print_values
方法不能用於nil
打印的值。我不明白什麼是扭轉名單。如果有人能向我解釋這一點,我將不勝感激。
只需手動運行該算法的簡單解決方案。用筆和紙。跟蹤節點的狀態。你會看到的。 –