aboutsummaryrefslogtreecommitdiff
path: root/challenge-068/lubos-kolouch/python/ch-2.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-068/lubos-kolouch/python/ch-2.py')
-rw-r--r--challenge-068/lubos-kolouch/python/ch-2.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/challenge-068/lubos-kolouch/python/ch-2.py b/challenge-068/lubos-kolouch/python/ch-2.py
new file mode 100644
index 0000000000..7f73a59f9b
--- /dev/null
+++ b/challenge-068/lubos-kolouch/python/ch-2.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+class Node:
+ def __init__(self, x):
+ self.val = x
+ self.next = None
+
+
+def reorderList(head):
+ # Find the middle of the linked list
+ slow = fast = head
+ while fast and fast.next:
+ slow = slow.next
+ fast = fast.next.next
+
+ # Reverse the second half of the linked list
+ prev = None
+ while slow:
+ next_node = slow.next
+ slow.next = prev
+ prev = slow
+ slow = next_node
+
+ # Merge the first half and the reversed second half
+ first_half = head
+ second_half = prev
+ while second_half.next:
+ first_half.next, first_half = second_half, first_half.next
+ second_half.next, second_half = first_half, second_half.next
+
+ return head
+
+
+# Test the function
+head = Node(1)
+head.next = Node(2)
+head.next.next = Node(3)
+head.next.next.next = Node(4)
+reordered_list = reorderList(head)
+
+node = reordered_list
+while node:
+ print(node.val, end=" ")
+ node = node.next