Пример #1
0
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
Пример #2
0
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
Пример #3
0
            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.