proffreda

lab09_extra.py

Nov 2nd, 2016
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. ## Extra Mutable Linked List Questions ##
  2.  
  3. # Q6
  4. def reverse(link):
  5. """Returns a Link that is the reverse of the original.
  6.  
  7. >>> print_link(reverse(Link(1)))
  8. <1>
  9. >>> link = Link(1, Link(2, Link(3)))
  10. >>> new = reverse(link)
  11. >>> print_link(new)
  12. <3 2 1>
  13. >>> print_link(link)
  14. <1 2 3>
  15. """
  16. "*** YOUR CODE HERE ***"
  17.  
  18.  
  19. # Q7
  20. def add_links(link1, link2):
  21. """Adds two Links, returning a new Link
  22.  
  23. >>> l1 = Link(1, Link(2))
  24. >>> l2 = Link(3, Link(4, Link(5)))
  25. >>> new = add_links(l1,l2)
  26. >>> print_link(new)
  27. <1 2 3 4 5>
  28. """
  29. "*** YOUR CODE HERE ***"
  30.  
  31.  
  32. # Q8
  33. def slice_link(link, start, end):
  34. """Slices a Link from start to end (as with a normal Python list).
  35.  
  36. >>> link = Link(3, Link(1, Link(4, Link(1, Link(5, Link(9))))))
  37. >>> new = slice_link(link, 1, 4)
  38. >>> print_link(new)
  39. <1 4 1>
  40. """
  41. "*** YOUR CODE HERE ***"
  42.  
  43.  
  44. # Linked List Class
  45. class Link:
  46.  
  47. empty = ()
  48.  
  49. def __init__(self, first, rest=empty):
  50. assert rest is Link.empty or isinstance(rest, Link)
  51. self.first = first
  52. self.rest = rest
  53. def print_link(link):
  54. """Print elements of a linked list link.
  55.  
  56. >>> link = Link(1, Link(2, Link(3)))
  57. >>> print_link(link)
  58. <1 2 3>
  59. >>> link1 = Link(1, Link(Link(2), Link(3)))
  60. >>> print_link(link1)
  61. <1 <2> 3>
  62. >>> link1 = Link(3, Link(Link(4), Link(5, Link(6))))
  63. >>> print_link(link1)
  64. <3 <4> 5 6>
  65. """
  66. print('<' +helper(link).rstrip() +'>')
  67.  
  68. def helper(link):
  69. if link == Link.empty:
  70. return ''
  71. elif isinstance(link.first, Link):
  72. return '<' +helper(link.first).rstrip() + '> '+ helper(link.rest)
  73. else:
  74. return str(link.first) +' '+ helper(link.rest)
Advertisement
Add Comment
Please, Sign In to add comment