head, tail = None, None
    while l1 and l2:
        if (l1.val < l2.val):
            head, tail = insertTo(head, tail, l1.val)
            l1 = l1.next
        else:
            head, tail = insertTo(head, tail, l2.val)
            l2 = l2.next

    if l1:
        while l1:
            head, tail = insertTo(head, tail, l1.val)
            l1 = l1.next

    if l2:
        while l2:
            head, tail = insertTo(head, tail, l2.val)
            l2 = l2.next

    return head


if __name__ == '__main__':
    list1 = [1, 2]
    list2 = [1, 2, 3, 4]
    l1 = LinkedList.build_ll_from_list(list1)
    l2 = LinkedList.build_ll_from_list(list2)
    merged_head = solution(l1.head, l2.head)
    merged = LinkedList(merged_head)
    merged.print_ll()
コード例 #2
0
from data_structures.linked_list import LinkedList

def find_len(head):
    length = 0
    while head:
        length += 1
        head = head.next
    return length

def stack_solution(head):
    stack = []
    length = find_len(head)
    if length == 0 or length == 1:
        return True

    i = 0
    while i < length:
        if i < (length//2):
            stack.append(head.val)
            head = head.next
        else:
            if head.val == stack[-1]:
                stack.pop()
            head = head.next
        i += 1

    return not stack

if __name__ == '__main__':
    ll = LinkedList.build_ll_from_list([1, 2, 3, 2, 1])
    print(stack_solution(ll.head))
コード例 #3
0
# Reverse Linked List
# Reverse a singly linked list.
from data_structures.linked_list import LinkedList

def solution(ll):
    prev = None
    cur = ll.head
    if not cur:
        return ll

    while cur:
        tmp = cur.next
        cur.next = prev
        prev = cur
        cur = tmp

    return LinkedList(prev)


if __name__ == '__main__':
    l = [1, 2, 3, 4]
    ll = LinkedList.build_ll_from_list(l)
    print("Before: ")
    ll.print_ll()
    reversed_ll = solution(ll)
    print("After: ")
    reversed_ll.print_ll()