Skip to main content

Misc

114. Flatten Binary Tree to Linked List

114. Flatten Binary Tree to Linked List

Medium4 solutionsanalysis4 playgrounds

Solutions:

Analysis

class Solution:
def flatten(self, root: Optional[TreeNode]) -> None:
def rec(node):
nonlocal curr
if node:
curr.right = node
curr = curr.right
left, right = curr.left, curr.right
curr.left = curr.right = None
rec(left)
rec(right)
 
sentinel = curr = TreeNode(None)
rec(root)
return sentinel.right

234. Palindrome Linked List

234. Palindrome Linked List

Easy3 solutionsanalysis1 playground

Solutions:

Analysis

def isPalindrome(head):
def reverse(head):
"""Abdul Bari's solution"""
front, mid, back = head, None, None
while front:
front, mid, back = front.next, front, mid
mid.next = back
return mid
 
def middleNode(head):
mid_prev = None
slow = fast = head
while fast and fast.next:
mid_prev = slow
slow, fast = slow.next, fast.next.next
return slow, mid_prev
 
middle_node, mid_prev = middleNode(head)
last_node = reverse(middle_node)
 
result = True
 
a, b = head, last_node
while a and b:
if a.val != b.val:
result = False
break
a, b = a.next, b.next
if mid_prev:
mid_prev.next = reverse(last_node)
return result