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()
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))
# 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()