def pivot(head, k): less = ListNode(0) equal = ListNode(0) more = ListNode(0) less_head, equal_head, more_head = less, equal, more current = head while current: next_node = current.next_node current.next_node = None # Could do voodoo to make [equal, more, less] list, but this is clearer if current.value == k: equal.next_node = current equal = equal.next_node elif current.value > k: more.next_node = current more = more.next_node else: less.next_node = current less = less.next_node current = next_node less.next_node = equal_head.next_node equal.next_node = more_head.next_node return less_head.next_node
def add(a, b): result = ListNode(0) result_head = result carry = 0 while a or b or carry: a_digit = a.value if a else 0 b_digit = b.value if b else 0 a = a.next_node if a else None b = b.next_node if b else None digit_sum = a_digit + b_digit + carry new_digit = digit_sum % 10 carry = digit_sum / 10 result.next_node = ListNode(new_digit) result = result.next_node return result_head.next_node
result = next_node head = next_node else: result.next_node = next_node result = result.next_node if a: result.next_node = a elif b: result.next_node = b else: result.next_node = None return head # Tests from linked_list import ListNode a = ListNode(2) a.next_node = ListNode(5) a.next_node.next_node = ListNode(7) b = ListNode(3) b.next_node = ListNode(11) r = merge(a, b) print r.traversal() # Time: 15 minutes ### # Mistakes / Bugs / Misses ### # Spent a long time looking for a bug here, when it was a bug in my library code.