Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    
    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)
Exemplo n.º 7
0
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))