import unittest
class Node:
def __init__(self, value):
self.value = value
self.next = None
class NodeBuilder:
def __init__(self):
self.first = None
self.last = None
def add(self, value):
if self.first is None:
self.first = self.last = Node(value)
else:
self.last.next = Node(value)
self.last = self.last.next
return self
def build(self):
return self.first
@staticmethod
def new(value):
builder = NodeBuilder()
return builder.add(value)
def kth_to_last_node(node, kth):
first = None
count = 0
while node is not None:
count += 1
if first is None:
first = Node(node.value)
else:
if count > kth:
first = first.next
node = node.next
return first.value
class TestStringMethods(unittest.TestCase):
def test_upper(self):
node = NodeBuilder.new('this') \
.add('is') \
.add('mason') \
.build()
last_node = kth_to_last_node(node, 1)
self.assertTrue(last_node is 'mason', last_node)
if __name__ == '__main__':
unittest.main()