Add 'universe/' from commit '8ad51b24dd'
				
					
				
			git-subtree-dir: universe git-subtree-mainline:15110e6de9git-subtree-split:8ad51b24dd
This commit is contained in:
		
						commit
						fb9380ba26
					
				
					 131 changed files with 13792 additions and 0 deletions
				
			
		
							
								
								
									
										82
									
								
								universe/data_structures_and_algorithms/kth-to-last.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								universe/data_structures_and_algorithms/kth-to-last.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,82 @@ | |||
| import unittest | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Solution | ||||
| ################################################################################ | ||||
| def length(x): | ||||
|     if not x: | ||||
|         return 0 | ||||
|     else: | ||||
|         count = 1 | ||||
|         while x: | ||||
|             x = x.next | ||||
|             count += 1 | ||||
|         return count | ||||
| 
 | ||||
| 
 | ||||
| def kth_to_last_node(k, x): | ||||
|     hops = length(x) - 1 | ||||
|     dest = hops - k | ||||
| 
 | ||||
|     if k == 0: | ||||
|         raise Exception("Our God doesn't support this kind of behavior.") | ||||
| 
 | ||||
|     if dest < 0: | ||||
|         raise Exception('Value k to high for list.') | ||||
| 
 | ||||
|     while dest > 0: | ||||
|         x = x.next | ||||
|         dest -= 1 | ||||
| 
 | ||||
|     return x | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Tests | ||||
| ################################################################################ | ||||
| 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) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue