Beispiel #1
0
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
Beispiel #2
0
            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()
Beispiel #7
0
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()
Beispiel #8
0
        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))
Beispiel #9
0
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
Beispiel #12
0
        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)
Beispiel #14
0
            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()