我想在Ruby中实现merge sort for a single linked list。
此代码正在运行,没有任何错误,但未按预期输出。
class Node
attr_accessor :data,:next
def initialize(value)
@data = value
@next = nil
end
end
合并排序方法:
def mergesort(head)
return head if !head || !head.next
a,b = frontbacksplit(head)
mergesort(a)
mergesort(b)
c = sortedmerge(a,b) #something is going wrong here
end
此方法用于将列表分为两个子列表:
def frontbacksplit(head)
slow = head
fast = head.next
until fast.nil?
fast = fast.next
unless fast.nil?
slow = slow.next
fast = fast.next
end
end
a = head
b = slow.next
slow.next = nil
[a,b]
end
此方法可能有误:
def sortedmerge(a,b)
result = nil
if a.nil?
return b
elsif b.nil?
return a
end
if a.data <= b.data
result = a
result.next = sortedmerge(a.next,b)
else
result = b
result.next = sortedmerge(a,b.next)
end
result
end