def intersection_list(head1, head2): ll = LinkedList() cur1 = head1 cur2 = head2 while cur1 and cur2: if cur1.data < cur2.data: cur1 = cur1.next elif cur1.data > cur2.data: cur2 = cur2.next else: ll.insert_at_ending(cur2.data) cur1 = cur1.next cur2 = cur2.next return ll
new.next = cur1 cur1 = cur1.next new = new.next while cur2 : new.next = cur2 cur2 = cur2.next new = new.next new.next = None return head def insert_at_ending(last,node): if not last : return node else : last.next = node return node if __name__=='__main__': ll1 = LinkedList() for i in range(1,15): ll1.insert_at_ending(i) ll2 = LinkedList() for j in range(11,19): ll2.insert_at_ending(j) head = merge_sortedlists(ll2.head,ll1.head) current = head while current : print(current.data) current = current.next
current = head next = None prev = None count = 0 while current and count < k: next = current.next current.next = prev prev = current current = next count += 1 if next: head.next = current count = 0 while current and count < k - 1: current = current.next count += 1 if current: current.next = reverse_alt_knodes(current.next, k) return prev if __name__ == '__main__': ll = LinkedList() for i in range(1, 10): ll.insert_at_ending(i) ll.head = reverse_alt_knodes(ll.head, 3) ll.print_list()
from GeeksForGeeks.LinkedList.SinglyLinkedList import LinkedList """ function a revervse a linkedlist """ def reverse_ll(head): """ reversing the pointers for every node - Single traveral - O(n) time. :param head :return: """ prev = None current = head while current: temp = current.next current.next = prev prev = current current = temp return prev if __name__ == '__main__': ll = LinkedList() for i in range(5, 9): ll.insert_at_ending(i) ll.print_list() ll.head = reverse_ll(ll.head) ll.print_list()
from GeeksForGeeks.LinkedList.SinglyLinkedList import LinkedList """ Move last element to front of a given Linked List Write a C function that moves last element to front in a given Singly Linked List. For example, if the given Linked List is 1->2->3->4->5, then the function should change the list to 5->1->2->3->4. """ def move_nth(head): if not head: return else: current = head prev = head while current.next is not None: prev = current current = current.next prev.next = None current.next = head head = current return head if __name__ == '__main__': ll = LinkedList() for i in range(1, 10): ll.insert_at_ending(i) ll.head = move_nth(ll.head) ll.print_list()
from GeeksForGeeks.LinkedList.SinglyLinkedList import LinkedList """ Delete alternate nodes of a Linked List Given a Singly Linked List, starting from the second node delete all alternate nodes of it. For example, if the given linked list is 1->2->3->4->5 then your function should convert it to 1->3->5, and if the given linked list is 1->2->3->4 then convert it to 1->3. """ def delete_alternate_node(node): if not node: return else: current = node while current.next: current.next = current.next.next current = current.next if __name__ == '__main__': ll = LinkedList() for i in range(1, 6): ll.insert_at_ending(i) delete_alternate_node(ll.head) ll.print_list()
def delete_nodes(head): if not head: return else: new_head = reverse(head) current = new_head _max = current.data while current and current.next: if current.next.data < _max and current.next: current.next = current.next.next else: _max = current.data current = current.next head1 = reverse(new_head) return head1 if __name__ == '__main__': ll = LinkedList() ll.insert_at_ending(12) ll.insert_at_ending(15) ll.insert_at_ending(10) ll.insert_at_ending(11) ll.insert_at_ending(5) ll.insert_at_ending(6) ll.insert_at_ending(2) ll.insert_at_ending(3) ll.head = delete_nodes(ll.head) ll.print_list()
cur1 = head1 cur2 = head2 while cur1 and cur2: if cur1.data != cur2.data: return False else: cur1 = cur1.next cur2 = cur2.next if cur1: return False if cur2: return False return True if __name__ == '__main__': ll = LinkedList() for i in range(1, 10): ll.insert_at_ending(i) l2 = LinkedList() for i in range(1, 10): l2.insert_at_ending(i) l3 = LinkedList() for j in range(1, 5): l3.insert_at_ending(j) print(check_identical(ll.head, l2.head)) print(check_identical(l2.head, l3.head)) print(is_identical(ll.head, l2.head)) print(is_identical(l2.head, l3.head))
from GeeksForGeeks.LinkedList.SinglyLinkedList import LinkedList def remove_duplicates(head): if not head: return else: current = head while current and current.next: if current.data == current.next.data: current.next = current.next.next current = current.next if __name__ == '__main__': ll = LinkedList() for i in range(1, 10): ll.sorted_insert(i) for i in range(1, 10): ll.sorted_insert(i) ll.print_list() print('break') remove_duplicates(ll.head) ll.print_list()
prev = None next = None while current and count < k : next = current.next current.next = prev prev = current current = next count += 1 if next : head.next = reverse_in_groups(next,k) return prev if __name__=='__main__': ll = LinkedList() for i in range(1,3): ll.insert_at_ending(i) ll.head = reverse(ll.head) #ll.print_list() ll.head = reverse(ll.head) ll.head = reverse_in_groups(ll.head,1) ll.print_list()
""" def getNthNode(head,n): """ function to return nth node from the start in a singly linkedlist :param head: :param n: nth node :return: """ if not head : return None count = 0 temp = head while temp and count < n: temp = temp.next count += 1 if temp : return temp.data else : return temp if __name__=="__main__": ll = LinkedList() for i in range(1,10): ll.insert_at_begining(i) print(getNthNode(ll.head,5)) xt
return node current = node.next prev = node node = current while prev and current : next = current.next current.next = prev if not next or not next.next : prev.next = next break prev.next = next.next prev = next current = prev.next return node if __name__=='__main__': ll = LinkedList() for i in range(1,10): ll.insert_at_ending(i) #ll.print_list() #pairwise_swap(ll.head) #ll.print_list() ll.head = _pairwise_swap(ll.head) ll.print_list()
def addsamesize(head1, head2): if not head1 and not head2: return None, 0 else: node = Node() node.next, carry = addsamesize(head1.next, head2.next) _sum = head1.data + head2.data + carry carry = _sum // 10 _sum = _sum % 10 node.data = _sum return node, carry if __name__ == '__main__': l1 = LinkedList() l1.insert_at_ending(5) l1.insert_at_ending(6) l1.insert_at_ending(3) l1.insert_at_ending(3) l2 = LinkedList() l2.insert_at_ending(8) l2.insert_at_ending(4) l2.insert_at_ending(2) #head = add_numbers(l1.head,l2.head) #print_ll(head) root = addnumbers(l1.head, l2.head) print_ll(root)
current = current.next while cur2: _sum = cur2.data + carry carry = _sum // 10 _sum = _sum % 10 current.next = Node(_sum) cur2 = cur2.next current = current.next if carry == 1: current.next = Node(carry) return new_head if __name__ == '__main__': ll1 = LinkedList() ll1.insert_at_ending(3) ll1.insert_at_ending(6) ll1.insert_at_ending(5) ll2 = LinkedList() ll2.insert_at_ending(2) ll2.insert_at_ending(4) ll2.insert_at_ending(8) ll = LinkedList() ll.head = add(ll1.head, ll2.head) ll.print_list()