Guest User

Untitled

a guest
Mar 17th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. # Libraries Included:
  2. # Numpy, Scipy, Scikit, Pandas
  3.  
  4. print "Hello, world!"
  5.  
  6. class Node(object):
  7. def __init__(self, val=None, next=None):
  8. self.val = val
  9. self.next = next
  10.  
  11. def append(self, next):
  12. if not isinstance(next, Node):
  13. raise RuntimeError("Not node!")
  14. self.next = next
  15. return next
  16.  
  17.  
  18. def print_linked_list(node):
  19. print node.val
  20. if node.next:
  21. print_linked_list(node.next)
  22.  
  23.  
  24. def reverse(node):
  25. if not node:
  26. return node
  27. previous = None
  28. current = node
  29. while current:
  30. next = current.next
  31. current.next = previous
  32. previous = current
  33. current = next
  34. return previous
  35.  
  36.  
  37. def reverse_k_only(node, k):
  38. if not node:
  39. return node
  40. previous = None
  41. current = node
  42. end_of_k = current
  43. while current and k > 0:
  44. next = current.next
  45. current.next = previous
  46. previous = current
  47. current = next
  48. k -= 1
  49. end_of_k.next = current
  50. return previous, end_of_k
  51.  
  52.  
  53. def reverse_in_k_group(node, k):
  54. if k == 0:
  55. return node
  56. start, end_of_k = reverse_k_only(node, k)
  57.  
  58. while end_of_k.next:
  59. old_end_of_k = end_of_k
  60. new_start, end_of_k = reverse_k_only(end_of_k.next, k)
  61. old_end_of_k.next = new_start
  62. return start
  63.  
  64.  
  65. def reverse_in_variable_k_group(node, k):
  66. start, end_of_k = reverse_k_only(node, k)
  67. k -= 1
  68.  
  69. while end_of_k.next and k > 0:
  70. old_end_of_k = end_of_k
  71. new_start, end_of_k = reverse_k_only(end_of_k.next, k)
  72. old_end_of_k.next = new_start
  73. k -= 1
  74. if k == 0:
  75. end_of_k.next = None
  76. return start
  77.  
  78.  
  79. head = Node(1)
  80. next = head
  81. for i in range(2,10):
  82. next = next.append(Node(i))
  83.  
  84.  
  85. print_linked_list(head)
  86.  
  87. reversed = reverse_in_variable_k_group(head, 7)
  88.  
  89. print_linked_list(reversed)
Add Comment
Please, Sign In to add comment