def append_zeros(head, n): h = None t = None while n > 0: if t is None: t = Node(0) h = t n -= 1 continue t.nxt = Node(0) n -= 1 t = t.nxt if t is None: return head t.nxt = head return h
def add_lls(h1, h2): c1 = count_nodes(h1) c2 = count_nodes(h2) ll = h1 if c1 >= c2 else h2 sl = h1 if ll == h2 else h2 sl = append_zeros(sl, abs(c1 - c2)) carry = add_eq_len_lls(ll, sl) if carry > 0: head = Node(carry) head.nxt = h1 return head return h1
def ll_add_rev(n1,n2,rem): if not n1 and not n2 and not rem: return None val = rem if n1: val += n1.val if n2: val += n2.val rem = 0 n = Node(val % 10) new_node = ll_add_rev(n1.nxt if n1 else None, n2.nxt if n2 else None, 1 if val > 9 else 0) n.nxt = new_node return n
def push(self,val): n = Node(val) n.nxt = self.top self.top = n if not self.minstack.peek() or val < self.minstack.peek(): self.minstack.push(val)