Saturday, 25 September 2021

Intersection of Two Linked Lists - LeetCode 160

 Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.

For example, the following two linked lists begin to intersect at node c1:

The test cases are generated such that there are no cycles anywhere in the entire linked structure.

Note that the linked lists must retain their original structure after the function returns.

Custom Judge:

The inputs to the judge are given as follows (your program is not given these inputs):

  • intersectVal - The value of the node where the intersection occurs. This is 0 if there is no intersected node.
  • listA - The first linked list.
  • listB - The second linked list.
  • skipA - The number of nodes to skip ahead in listA (starting from the head) to get to the intersected node.
  • skipB - The number of nodes to skip ahead in listB (starting from the head) to get to the intersected node.

The judge will then create the linked structure based on these inputs and pass the two heads, headA and headB to your program. If you correctly return the intersected node, then your solution will be accepted.

 

Example 1:

Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
Output: Intersected at '8'
Explanation: The intersected node's value is 8 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [4,1,8,4,5]. From the head of B, it reads as [5,6,1,8,4,5]. There are 2 nodes before the intersected node in A; There are 3 nodes before the intersected node in B.

Example 2:

Input: intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
Output: Intersected at '2'
Explanation: The intersected node's value is 2 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [1,9,1,2,4]. From the head of B, it reads as [3,2,4]. There are 3 nodes before the intersected node in A; There are 1 node before the intersected node in B.

Example 3:

Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
Output: No intersection
Explanation: From the head of A, it reads as [2,6,4]. From the head of B, it reads as [1,5]. Since the two lists do not intersect, intersectVal must be 0, while skipA and skipB can be arbitrary values.
Explanation: The two lists do not intersect, so return null.

 

Constraints:

  • The number of nodes of listA is in the m.
  • The number of nodes of listB is in the n.
  • 0 <= m, n <= 3 * 104
  • 1 <= Node.val <= 105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • intersectVal is 0 if listA and listB do not intersect.
  • intersectVal == listA[skipA] == listB[skipB] if listA and listB intersect.

 

Follow up: Could you write a solution that runs in O(n) time and use only O(1) memory?

Solution(Only function):
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        
        if(headA==null || headB==null)  return null;
        
        ListNode list1_ptr=headA;
        ListNode list2_ptr=headB;
        
        while(list1_ptr!=list2_ptr)
        {
            if(list1_ptr==null)
                list1_ptr=headB;
            else
                list1_ptr=list1_ptr.next;
            
            if(list2_ptr==null)
                list2_ptr=headA;
            else
                list2_ptr=list2_ptr.next;           
        }
        return list1_ptr;
    }
}

Remove Linked List Elements - LeetCode 203

 Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

 

Example 1:

Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]

Example 2:

Input: head = [], val = 1
Output: []

Example 3:

Input: head = [7,7,7,7], val = 7
Output: []

 

Solution(Only function):

class Solution {

    public ListNode removeElements(ListNode head, int val) {

        if(head==null)

            return null;           

        while(head!=null && head.val==val)//checking if head is the val

        {

            head=head.next;

        }       

        ListNode curr=head;

        while(curr!=null && curr.next!=null) 

        {

            if(curr.next.val==val)

            {

                curr.next=curr.next.next;

            }else

            {

                curr=curr.next;

            }

        }

        return head;

    }

}

Reverse Linked List - LeetCode 206

 Given the head of a singly linked list, reverse the list, and return the reversed list.

 

Example 1:

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]

Example 2:

Input: head = [1,2]
Output: [2,1]

Example 3:

Input: head = []
Output: []

 

Solutions:

class Solution {

    public ListNode reverseList(ListNode head) {        

       ListNode previous=null;        

        while(head!=null)

        {

            ListNode nextNode=head.next;            

            head.next=previous;

            previous=head;

            head=nextNode;   

        }        

        return previous;       

    }

}

Linked List Cycle - LeetCode 141

 Given head, the head of a linked list, determine if the linked list has a cycle in it.

There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail's next pointer is connected to. Note that pos is not passed as a parameter.

Return true if there is a cycle in the linked list. Otherwise, return false.

 

Example 1:

Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).

Example 2:

Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 0th node.

Example 3:

Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.

 

Solution(Only function):

public class Solution {

    public boolean hasCycle(ListNode head) {

        

        if(head==null)

              return false; 

        

        ListNode temp=head;

        

        ListNode thief=temp;

        ListNode police=temp.next;

        

        while(thief!=police)

        {

           if(police==null||police.next==null)

               return false;

            

            thief=thief.next;

            police=police.next.next;

            

        }

        return true;

    }

}


Remove Duplicates from Sorted List - LeetCode 83

 Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.

 

Example 1:

Input: head = [1,1,2]
Output: [1,2]

Example 2:

Input: head = [1,1,2,3,3]
Output: [1,2,3]

 

Solution(Only function):

class Solution {

    public ListNode deleteDuplicates(ListNode head) {

        

        ListNode temp=head;

        while(temp!=null && temp.next!=null )

        {

            if(temp.val==temp.next.val)

            {

                temp.next=temp.next.next;

            }

            else

            {

                temp=temp.next;

            }   

        }      

        return head;

    }

}

Saturday, 11 September 2021

Reverse Integer - LeetCode 7

 Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Source Code:

class Solution {

    public int reverse(int x) {

        

        int remainder;

        int reversed=0;

        

        while(x!=0)

        {

            remainder=x%10;

            

            x/=10;

            

            if(reversed>Integer.MAX_VALUE/10 || reversed==Integer.MAX_VALUE/10 && remainder>7)

                return  0;

            if(reversed<Integer.MIN_VALUE/10 || reversed==Integer.MIN_VALUE/10 && remainder<-8)

                return 0;

            

            reversed=(reversed*10) + remainder;

        }

        

        return reversed;

    }

}

Random password generator in Java

       Random password generator in Java Source code: mport java.io.*; import java.util.*; public class Main { public static void main(Str...