Quick actions

cmd+k|ctrl+k

Navigation

Languages

kth_last_node.py

Snippet info

Language

Python

Visibility

public

Author

masonwan

Created

2017-03-15T17:06:25Z

Updated

2017-03-15T17:06:25Z

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()
INFO