def merge_shallow(a_head, b_head, info=True): if(info): print instructions head = current = linked_lists.node() while(a_head and b_head): # the final node's .next is None if a_head.value > b_head.value: current.value = b_head.value b_head = b_head.Next else: # a_head.value <= b_head.value current.value = a_head.value a_head = a_head.Next new_node = linked_lists.node() current.Next = new_node current = new_node # One of the lists was empty, so shallow-copy the rest of the other non_empty = a_head or b_head if non_empty: current.value = non_empty.value # resolve dangling value current.Next = non_empty.Next # append and finish else: # this happens only when both were passed in as None head = None return head
def add(): value = input("Enter the value of element:") if start.head == None: start.head = node(value) return loop = start.head while loop.next: loop = loop.next added = node(value) loop.next = added
def push(value): #print("[push operation]") #value = input("Enter the value of element:") if start.head == None: start.head = node(value) return loop = start.head while loop.next: loop = loop.next added = node(value) loop.next = added
def delete_duplicates(head): seen_values = {} my_node = head prev = None while my_node != None: try: x = seen_values[my_node.value] # If we don't get a key error here, we've seen the val before, so remove it. prev.Next = my_node.Next my_node = my_node.Next except KeyError: seen_values[my_node.value] = True prev = my_node my_node = my_node.Next return head if __name__ == "__main__": vals = [1,2,3,4,3,5,6,1,7,8,9,3,10,2,11] head = node() my_node = head for each in vals: my_node.value = each if each != vals[-1]: my_node.Next = node() my_node = my_node.Next print("Linked list before deletions:") print(traverse(head, False)) head = delete_duplicates(head) print("Linked list after deletions:") print(traverse(head, False))