Advertisement
rolfl

Untitled

Mar 24th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.93 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "testing"
  5. )
  6.  
  7. type Node struct {
  8.     Value int
  9.     Next  *Node
  10. }
  11.  
  12. func RReverse(node *Node) *Node {
  13.     if node == nil {
  14.         return node
  15.     }
  16.     if node.Next == nil {
  17.         return node
  18.     }
  19.     next := node.Next
  20.     node.Next = nil
  21.     last := RReverse(next)
  22.     next.Next = node
  23.     return last
  24. }
  25.  
  26. func IReverse(node *Node) *Node {
  27.     var previous *Node
  28.     for node != nil {
  29.         next := node.Next
  30.         node.Next = previous
  31.         previous = node
  32.         node = next
  33.     }
  34.     return previous
  35. }
  36.  
  37. func build(size int) *Node {
  38.     var next *Node
  39.     for i := size; i > 0; i-- {
  40.         next = &Node{i, next}
  41.     }
  42.     return next
  43. }
  44.  
  45. const max = 10000
  46.  
  47. func BenchmarkRecursive(b *testing.B) {
  48.     for i := 0; i < b.N; i++ {
  49.         if last := RReverse(build(max)).Value; last != max {
  50.             panic(last)
  51.         }
  52.     }
  53. }
  54.  
  55. func BenchmarkIterative(b *testing.B) {
  56.     for i := 0; i < b.N; i++ {
  57.         if last := IReverse(build(max)).Value; last != max {
  58.             panic(last)
  59.         }
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement