def partition(node, x): ll1 = Node(-1) ll2 = Node(-1) ll1_head = ll1 ll2_head = ll2 while node: if node.value < x: ll1.next = Node(node.value) ll1 = ll1.next else: ll2.next = Node(node.value) ll2 = ll2.next node = node.next ll1.next = ll2_head.next return ll1_head.next
def add_2linked_list(ll1, ll2, c): result = Node(-1) result_head = result while ll1 or ll2: v1 = ll1.value if ll1 else 0 v2 = ll2.value if ll2 else 0 v = v1 + v2 + c c = int(v / 10) result.next = Node(v % 10) result = result.next ll1 = ll1.next if ll1 else None ll2 = ll2.next if ll2 else None if c != 0: result.next = Node(c) return result_head.next
i = l - k while i > 0: head = head.next i -= 1 return head.value def kth_last_pointers(head, k): pointer1 = head pointer2 = head while k > 0: pointer2 = pointer2.next k -= 1 while pointer2: pointer1 = pointer1.next pointer2 = pointer2.next return pointer1.value root = Node(5) root.next = node3 = Node(3) node3.next = node7 = Node(7) node7.next = node1 = Node(1) node1.next = node3t = Node(3) node3t.next = node6 = Node(6) print(kth_last_recursive(root, 2)) #print(kthToLast2Pointers(root,2)) #print(kthToLast(root,2))
def intersection(ll): slow = ll fast = ll while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: break if fast is None or fast.next is None: return None slow = ll while slow != fast: slow = slow.next fast = fast.next return slow root = Node(1) node2 = Node(2) node3 = Node(3) root.next = node2 node2.next = node3 node3.next = node2 print(intersection(root).value)
result_head = result while ll1 or ll2: v1 = ll1.value if ll1 else 0 v2 = ll2.value if ll2 else 0 v = v1 + v2 + c c = int(v / 10) result.next = Node(v % 10) result = result.next ll1 = ll1.next if ll1 else None ll2 = ll2.next if ll2 else None if c != 0: result.next = Node(c) return result_head.next # root1 = Node(7,Node(1,Node(6))) # root2 = Node(5,Node(9,Node(2,Node(2)))) root1 = Node(9,Node(9)) root2 = Node(1) r = sum_lists(root1, root2) while r: print(r.value, end='') r = r.next
while longer != shorter: longer = longer.next shorter = shorter.next return shorter def get_tail_and_size(l): s = 0 while l and l.next: s +=1 l = l.next s += 1 return l,s def move_k_dist(l, k): while k > 0: l = l.next k -= 1 return l node = Node(1, Node(6)) root1 = Node(7,node) root2 = Node(5,Node(9,node)) print(intersection(root1, root2).value)
from CTCI.concepts.Node import Node def is_palindrome(ll): slow = ll fast = ll stack = [] while fast and fast.next: stack.append(slow.value) slow = slow.next fast = fast.next.next if fast: slow = slow.next while stack: if slow.value != stack.pop(): return False slow = slow.next return True root = Node(6, Node(1, Node(6))) print(is_palindrome(root))