From f6481508e2276feb1c66ebce47279edda6607a07 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Wed, 26 Nov 2025 17:18:01 -0500 Subject: [PATCH] Time: 0 ms (100%), Space: 19 MB (94.49%) - LeetHub --- .../0328-odd-even-linked-list.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 0328-odd-even-linked-list/0328-odd-even-linked-list.py diff --git a/0328-odd-even-linked-list/0328-odd-even-linked-list.py b/0328-odd-even-linked-list/0328-odd-even-linked-list.py new file mode 100644 index 0000000..201f636 --- /dev/null +++ b/0328-odd-even-linked-list/0328-odd-even-linked-list.py @@ -0,0 +1,50 @@ +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]: + """ + Complexities: + Time: O(n) + Space: O(1) + + where n = len(head) + """ + + # If len(head) <= 2, already sorted + if not head or not head.next: + return head + + oddHead = head + oddTail = head + evenHead = head.next + evenTail = head.next + + currNode = head.next.next + isOddIndex = True + + # Set tail.next = None + oddTail.next = None + evenTail.next = None + + # Separate list into odd list and even list + while currNode: + nextNode = currNode.next + currNode.next = None + + if isOddIndex: + oddTail.next = currNode + oddTail = currNode + else: + evenTail.next = currNode + evenTail = currNode + + currNode = nextNode + isOddIndex = not isOddIndex + + # Attach both lists + oddTail.next = evenHead + + return oddHead