Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| 
 | |
| 
 | |
| def kth_to_last_node(k, x):
 | |
|     a, b = x, x
 | |
| 
 | |
|     if k == 0:
 | |
|         raise Exception('Value of 0 for k is not supported')
 | |
| 
 | |
|     for _ in range(k - 1):
 | |
|         if not a.next:
 | |
|             raise Exception('Value of {} for k is too large'.format(k))
 | |
|         a = a.next
 | |
| 
 | |
|     while a.next:
 | |
|         a, b = a.next, b.next
 | |
|     return b
 | |
| 
 | |
| 
 | |
| class Test(unittest.TestCase):
 | |
|     class LinkedListNode(object):
 | |
|         def __init__(self, value, next=None):
 | |
|             self.value = value
 | |
|             self.next = next
 | |
| 
 | |
|         def get_values(self):
 | |
|             node = self
 | |
|             values = []
 | |
|             while node is not None:
 | |
|                 values.append(node.value)
 | |
|                 node = node.next
 | |
|             return values
 | |
| 
 | |
|     def setUp(self):
 | |
|         self.fourth = Test.LinkedListNode(4)
 | |
|         self.third = Test.LinkedListNode(3, self.fourth)
 | |
|         self.second = Test.LinkedListNode(2, self.third)
 | |
|         self.first = Test.LinkedListNode(1, self.second)
 | |
| 
 | |
|     def test_first_to_last_node(self):
 | |
|         actual = kth_to_last_node(1, self.first)
 | |
|         expected = self.fourth
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_second_to_last_node(self):
 | |
|         actual = kth_to_last_node(2, self.first)
 | |
|         expected = self.third
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_first_node(self):
 | |
|         actual = kth_to_last_node(4, self.first)
 | |
|         expected = self.first
 | |
|         self.assertEqual(actual, expected)
 | |
| 
 | |
|     def test_k_greater_than_linked_list_length(self):
 | |
|         with self.assertRaises(Exception):
 | |
|             kth_to_last_node(5, self.first)
 | |
| 
 | |
|     def test_k_is_zero(self):
 | |
|         with self.assertRaises(Exception):
 | |
|             kth_to_last_node(0, self.first)
 | |
| 
 | |
| 
 | |
| unittest.main(verbosity=2)
 |