# def remove_duplicates(node): # # Using 2 pointers(heads) current and runner # current = node # while current != None: # runner = current # while runner.next != None: # if current.data == runner.next.data: # runner.next = runner.next.next #skip # else: # runner = runner.next # shift ahead # current = current.next def remove_duplicates(node): current = node runner = node.next while runner != None: while current.data == runner.data: runner = runner.next current.next = runner current = current.next runner = runner.next if __name__ == "__main__": data = [1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5] head = nodelist_builder(data) remove_duplicates(head) printNodes(head)
if node == None: return None dummy_node = ListNode() head = dummy_node while node != None: next = node.next node.next = head.next #None if head.next == None else head.next = node node = next return head.next # def reverse(head): # if head == None or head.next == None: # return head # p = reverse(head.next) # head.next.next = head # 4->5 : 4->5->4 # head.next = None # 4->5->4 : 5->4 # return p if __name__ == "__main__": data = [ [1, 2, 3, 4, 5], [50, 40, 30, 20, 10], [], [3, 2] ] for test_list in data: head = nodelist_builder(test_list) rnode = reverse(head) printNodes(rnode) print("---x---")
# f2 = f2.next # f1.next = mid # return start def oddEvenList(node): if node == [] or node == None: return None head = node tail = node while node != None: next = node.next if node.val % 2 == 0: # Even node.next = head head = node else: tail.next = node tail = node node = next # detach self loop tail.next = None return head if __name__ == "__main__": data = [[1, 2, 3, 4, 5], [60, 50, 40, 30, 20, 10], [], [3, 2], [1]] for test_list in data: head = nodelist_builder(test_list) rhead = oddEvenList(head) printNodes(rhead) print("---x---")
if result1.tail != result2.tail: return None shorter = node1 if result1.size < result2.size else node2 longer = node2 if result1.size < result2.size else node1 # Shift head of longer list longer = get_kth_node(longer, abs(result1.size - result2.size)) while shorter != longer: shorter = shorter.next longer = longer.next return longer if __name__ == "__main__": n1 = Node(1) n2 = Node(2) n3 = Node(3) n4 = Node(4) n5 = Node(5) # list 1 n1.next = n2 n2.next = n3 n3.next = n5 # List 2 n4.next = n3 n3.next = n5 printNodes(n1) print() printNodes(n4) print("Intersection:", find_intersection(n1, n4).data)
next = node.next if node.val == val: #print("yes") prev.next = next else: prev = node #print(prev.val) node = next return dummy_node.next if __name__ == "__main__": data = [ ([4, 5, 1, 9], 5), ([4, 5, 1, 9], 1), ([1, 2, 3, 4], 3), ([0, 1], 0), ([1], 1), ([-3, 5, -99], -3) ] for test_list in data: head = nodelist_builder(test_list[0]) # dnode = head # while dnode != None: # if dnode.val == test_list[1]: # break # dnode = dnode.next # delete(dnode) new_node = delete(head, test_list[1]) printNodes(new_node) print("---x---")
([3, 5, 8, 5, 10, 2, 1], 5) def partition(node, threshold): left = node head = node previous = None while head != None: if head.data < threshold: next = head.next if previous: previous.next = next else: previous = head.next = left head = next else: previous = head head = head.next if __name__ == "__main__": data = [ ([10, 1, 2, 3, 4, 2, 4, 5], 3), ([3, 5, 8, 5, 10, 2, 1], 5) ] for test_tuple in data: head = nodelist_builder(test_tuple[0]) new_head = partition(head, test_tuple[1]) printNodes(new_head) print()
from linked_list import ListNode, nodelist_builder, printNodes def merge(l1, l2): if l1 == None and l2 == None: return None dummy_node = ListNode() dummy_head = dummy_node while l1 != None and l2 != None: if l1.val < l2.val: dummy_head.next = l1 #dummy_head = dummy_head.next l1 = l1.next else: dummy_head.next = l2 #dummy_head = dummy_head.next l2 = l2.next dummy_head = dummy_head.next dummy_head.next = l1 if l1 != None else l2 return dummy_node.next if __name__ == "__main__": data = [([1, 2, 4], [1, 3, 4]), ([], []), ([], [0])] for test_list in data: l1 = nodelist_builder(test_list[0]) l2 = nodelist_builder(test_list[1]) m_node = merge(l1, l2) printNodes(m_node) print("---x---")