mirror of
https://github.com/devenperez/leetcode.git
synced 2026-06-13 03:27:07 +00:00
Time: 179 ms (57.16%), Space: 31.9 MB (93.73%) - LeetHub
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Definition for singly-linked list.
|
||||
# class ListNode:
|
||||
# def __init__(self, val=0, next=None):
|
||||
# self.val = val
|
||||
# self.next = next
|
||||
class Solution:
|
||||
def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]:
|
||||
# Base case: len <= 2
|
||||
if head == None or head.next == None:
|
||||
return head
|
||||
elif head.next.next == None:
|
||||
if head.val > head.next.val:
|
||||
large = head
|
||||
small = head.next
|
||||
|
||||
small.next = large
|
||||
large.next = None
|
||||
return small
|
||||
return head
|
||||
|
||||
# Find middle node
|
||||
mid = head
|
||||
end = head.next
|
||||
while end.next is not None and end.next.next is not None:
|
||||
mid = mid.next
|
||||
end = end.next.next
|
||||
|
||||
# Detach lists
|
||||
secondHead = mid.next
|
||||
mid.next = None
|
||||
|
||||
# Merge two sorted linked lists
|
||||
sortedLeft = self.sortList(head)
|
||||
sortedRight = self.sortList(secondHead)
|
||||
|
||||
isLeftLower = sortedLeft.val < sortedRight.val
|
||||
mergeHead = sortedLeft if isLeftLower else sortedRight
|
||||
currentHead = mergeHead
|
||||
|
||||
sortedLeft = sortedLeft.next if isLeftLower else sortedLeft
|
||||
sortedRight = sortedRight if isLeftLower else sortedRight.next
|
||||
while sortedLeft is not None and sortedRight is not None:
|
||||
isLeftLower = sortedLeft.val < sortedRight.val
|
||||
|
||||
lowestNode = sortedLeft if isLeftLower else sortedRight
|
||||
sortedLeft = sortedLeft.next if isLeftLower else sortedLeft
|
||||
sortedRight = sortedRight if isLeftLower else sortedRight.next
|
||||
currentHead.next = lowestNode
|
||||
currentHead = currentHead.next
|
||||
|
||||
currentHead.next = sortedLeft if sortedLeft is not None else sortedRight
|
||||
|
||||
return mergeHead
|
||||
Reference in New Issue
Block a user