The challenge
Preloaded for you is a class, struct, or derived data type Node
(depending on the language) used to construct linked lists in this challenge:
class Node():
def __init__(self, data, next = None):
self.data = data
self.next = next
Create a function stringify
which accepts an argument list
/$list
and returns a string representation of the list. The string representation of the list starts with the value of the current Node
, specified by its data
/$data
/Data
property, followed by a whitespace character, an arrow, and another whitespace character (" -> "
), followed by the rest of the list. The end of the string representation of a list must always end with None
. For example, given the following list:
Node(1, Node(2, Node(3)))
… its string representation would be:
"1 -> 2 -> 3 -> None"
And given the following linked list:
Node(0, Node(1, Node(4, Node(9, Node(16)))))
… its string representation would be:
"0 -> 1 -> 4 -> 9 -> 16 -> None"
Note that None
itself is also considered a valid linked list. In that case, its string representation would simply be "None"
(again, depending on the language).
The solution in Python code
Option 1:
Node.__str__ = lambda self: "%s -> %s" % (self.data, self.next)
stringify = str
Option 2:
def stringify(ll):
r = []
while ll:
r, ll = r + [str(ll.data)], ll.next
return ' -> '.join(r + ['None'])
Option 3:
class Node():
def __init__(self, data, next = None):
self.data = data
self.next = next
def stringify(node):
k = ''
while True:
if node == None:
k += 'None'
return k
else:
k += '{} -> '.format(node.data)
node = node.next
Test cases to validate our solution
test.describe("stringify()")
test.it("should pass the example tests as shown in the Description")
test.assert_equals(stringify(Node(0, Node(1, Node(2, Node(3))))), '0 -> 1 -> 2 -> 3 -> None')
test.assert_equals(stringify(None), 'None')
test.assert_equals(stringify(Node(0, Node(1, Node(4, Node(9, Node(16)))))), '0 -> 1 -> 4 -> 9 -> 16 -> None')