Linked List
Linked List
prev = None
while slow:
nxt = slow.next
slow.next = prev
prev = slow
slow = nxt
while prev:
if head.val != prev.val:
return False
head = head.next
prev = prev.next
return True
prev.next = second
first.next = second.next
second.next = first
prev = first
head = first.next
return dummy.next
dummy = ListNode(0)
dummy.next = head
group_prev = dummy
while True:
kth = get_kth(group_prev, k)
if not kth:
break
group_next = kth.next
# Reverse group
prev, curr = kth.next, group_prev.next
while curr != group_next:
tmp = curr.next
curr.next = prev
prev = curr
curr = tmp
tmp = group_prev.next
group_prev.next = kth
group_prev = tmp
return dummy.next
parts = []
cur = root
for i in range(k):
head = cur
for j in range(size + (1 if i < extra else 0) - 1):
if cur:
cur = cur.next
if cur:
nxt = cur.next
cur.next = None
cur = nxt
parts.append(head)
return parts
def reorderList(head):
if not head:
return
# Find middle
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
# Reverse second half
prev, curr = None, slow.next
slow.next = None
while curr:
tmp = curr.next
curr.next = prev
prev = curr
curr = tmp
# Merge
first, second = head, prev
while second:
tmp1, tmp2 = first.next, second.next
first.next = second
second.next = tmp1
first = tmp1
second = tmp2
def deleteNode(node):
node.val = node.next.val
node.next = node.next.next
# Split
slow, fast = head, head.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
mid = slow.next
slow.next = None
# Merge
left = sortList(head)
right = sortList(mid)
return merge(left, right)
dummy = ListNode(0)
dummy.next = head
prev, curr = dummy, head
reverse_flag = True
while curr:
tail = curr
for _ in range(k):
if not tail:
return dummy.next
tail = tail.next
if reverse_flag:
new_head = reverse(curr, k)
prev.next = new_head
prev = curr
curr = tail
else:
prev = curr
curr = tail
reverse_flag = not reverse_flag
return dummy.next
node.next = curr.next
curr.next = node
return head
def flatten(head):
if not head or not head.next:
return head
head.next = flatten(head.next)
head = merge(head, head.down)
return head
if not head:
return None
if not head.next:
return TreeNode(head.val)
mid = find_middle(head)
root = TreeNode(mid.val)
root.left = sortedListToBST(head)
root.right = sortedListToBST(mid.next)
return root
✅ What's Next?
You're now done with 30+ high-quality Linked List questions. Next steps:
● Move to Trees/BSTs?