Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Extra Mutable Linked List Questions ##
- # Q6
- def reverse(link):
- """Returns a Link that is the reverse of the original.
- >>> print_link(reverse(Link(1)))
- <1>
- >>> link = Link(1, Link(2, Link(3)))
- >>> new = reverse(link)
- >>> print_link(new)
- <3 2 1>
- >>> print_link(link)
- <1 2 3>
- """
- "*** YOUR CODE HERE ***"
- # Q7
- def add_links(link1, link2):
- """Adds two Links, returning a new Link
- >>> l1 = Link(1, Link(2))
- >>> l2 = Link(3, Link(4, Link(5)))
- >>> new = add_links(l1,l2)
- >>> print_link(new)
- <1 2 3 4 5>
- """
- "*** YOUR CODE HERE ***"
- # Q8
- def slice_link(link, start, end):
- """Slices a Link from start to end (as with a normal Python list).
- >>> link = Link(3, Link(1, Link(4, Link(1, Link(5, Link(9))))))
- >>> new = slice_link(link, 1, 4)
- >>> print_link(new)
- <1 4 1>
- """
- "*** YOUR CODE HERE ***"
- # Linked List Class
- class Link:
- empty = ()
- def __init__(self, first, rest=empty):
- assert rest is Link.empty or isinstance(rest, Link)
- self.first = first
- self.rest = rest
- def print_link(link):
- """Print elements of a linked list link.
- >>> link = Link(1, Link(2, Link(3)))
- >>> print_link(link)
- <1 2 3>
- >>> link1 = Link(1, Link(Link(2), Link(3)))
- >>> print_link(link1)
- <1 <2> 3>
- >>> link1 = Link(3, Link(Link(4), Link(5, Link(6))))
- >>> print_link(link1)
- <3 <4> 5 6>
- """
- print('<' +helper(link).rstrip() +'>')
- def helper(link):
- if link == Link.empty:
- return ''
- elif isinstance(link.first, Link):
- return '<' +helper(link.first).rstrip() + '> '+ helper(link.rest)
- else:
- return str(link.first) +' '+ helper(link.rest)
Advertisement
Add Comment
Please, Sign In to add comment