JAVA EXAMPLE PROGRAMS

JAVA EXAMPLE PROGRAMS

Publish Your Article Here

Program: Detect and remove loop in a LinkedList.


Problem Description:

Write a program to identify given linked list contains loop or not. If loop exists, then remove the loop.

The below diagram illustrates linked list loop/cycle:

In our last example, we have used Floyd’s Cycle detection algorithm to terminate when fast and slow pointers meet at a common point. We will use same approach to identify loop. Here is our approach.

  • We will use Floyd’s Cycle detection algorithm to identify loop and get the pointer to loop node.
  • Count number of nodes in the loop. Let the count be k.
  • Fix one pointer to the head node and another pointer to Kth node from the head.
  • Move both pointers at the same pace, they will meet at loop starting node.
  • Get the pointer to the last node of the loop and assign NULL to next value of it.



DeleteLinkedListLoop
package com.java2novice.algos;

public class DeleteLinkedListLoop {

    static class Node {
        int data;
        Node next;
        Node(int tmp) {data = tmp;}
    }

    public static void main(String[] a){

        Node n1 = new Node(34);
        Node n2 = new Node(25);
        Node n3 = new Node(31);
        Node n4 = new Node(56);
        Node n5 = new Node(45);
        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        n4.next = n5;
        n5.next = n3;

        System.out.println("Loop detected: "+identifyAndDeleteLoop(n1));
        printLinkedList(n1);
    }

    static boolean identifyAndDeleteLoop(Node head) {

        /**
         * In this method, we will keep track of two pointers.
         * One pointer moves one step at a time and second one two steps.
         * If both pointers are same at any iteration, then the loop exists.
         * Then call the method to break the loop.
         */
        Node slowMv = head;
        Node fastMv = head;
        while (slowMv != null && fastMv != null && fastMv.next != null) {
            slowMv = slowMv.next;
            fastMv = fastMv.next.next;
            if(slowMv == fastMv) {
                breakLoop(slowMv, head);
                return Boolean.TRUE;
            }
        }
        return Boolean.FALSE;
    }

    static void breakLoop(Node loop, Node head) {

        Node p1 = loop;
        Node p2 = loop;
        int count=1;
        // count number of nodes on the loop
        while(p1.next != p2) {
            p1 = p1.next;
            count++;
        }
        // fix the pointer to head
        p1 = head;
        // another point is K nodes after head
        p2 = head;
        for(int i=0;i<count;i++) {
            p2 = p2.next;
        }
        // move both pointers at same pace so that they meet at loop starting node
        while (p1 != p2) {
            p1 = p1.next;
            p2 = p2.next;
        }
        // get pointer to the last node
        while(p2.next != p1) {
            p2 = p2.next;
        }
        // set the last node next value to null
        p2.next = null;
    }

    static void printLinkedList(Node head) {
        while(head != null) {
            System.out.print(head.data+" ");
            head = head.next;
        }
    }
}

Output:
Loop detected: true
34 25 31 56 45 
<< Previous Program | Next Program >>

List Of All Interview Programs:

  1. Remove last node of the Linked List
  2. Identify middle element of a Linked List
  3. Identify given LinkedList is a palindrom or not using Stack.
  4. Remove duplicates from sorted linked list
  5. Find Nth node from the end of Linked List
  6. Identify loop/cycle in a LinkedList.
  7. Find length of a loop in a LinkedList.
  8. Detect and remove loop in a LinkedList.
  9. How to reverse Singly Linked List?
  10. Check if given Linked List is a Circular Linked List or not.
  11. Find out duplicate number between 1 to N numbers.
  12. Find out middle index where sum of both ends are equal.
  13. Write a singleton class.
  14. Write a program to create deadlock between two threads.
  15. Write a program to reverse a string using recursive algorithm.
  16. Write a program to reverse a number.
  17. Write a program to convert decimal number to binary format.
  18. Write a program to find perfect number or not.
  19. Write a program to implement ArrayList.
  20. Write a program to find maximum repeated words from a file.
  21. Wrie a program to find out duplicate characters in a string.
  22. Write a program to find top two maximum numbers in a array.
  23. Write a program to sort a map by value.
  24. Write a program to find common elements between two arrays.
  25. How to swap two numbers without using temporary variable?
  26. Write a program to print fibonacci series.
  27. Write a program to find sum of each digit in the given number using recursion.
  28. Write a program to check the given number is a prime number or not?
  29. Write a program to find the given number is Armstrong number or not?
  30. Write a program to convert binary to decimal number.
  31. Write a program to check the given number is binary number or not?
  32. Write a program for Bubble Sort in java.
  33. Write a program for Insertion Sort in java.
  34. Write a program to implement hashcode and equals.
  35. How to get distinct elements from an array by avoiding duplicate elements?
  36. Write a program to get distinct word list from the given file.
  37. Write a program to get a line with max word count from the given file.
  38. Write a program to convert string to number without using Integer.parseInt() method.
  39. Write a program to find two lines with max characters in descending order.
  40. Write a program to find the sum of the first 1000 prime numbers.
  41. Find longest substring without repeating characters.
  42. Write a program to remove duplicates from sorted array.
  43. How to sort a Stack using a temporary Stack?
  44. Write a program to print all permutations of a given string.
  45. Implement Binary Search Tree (BST)
  46. Find min and max value from Binary Search Tree (BST)
  47. Find height of a Binary Search Tree (BST)
  48. Implement Binary Search Tree (BST) Level order traversal (breadth first).
  49. Implement Binary Search Tree (BST) pre-order traversal (depth first).
  50. Implement Binary Search Tree (BST) in-order traversal (depth first).
  51. Implement Binary Search Tree (BST) post-order traversal (depth first).
  52. How to check the given Binary Tree is Binary Search Tree (BST) or not?
  53. How to delete a node from Binary Search Tree (BST)?
  54. Write a program to find common integers between two sorted arrays.
  55. Write a program to find given two trees are mirror or not.
  56. HackerRank stack problem - Find maximum element.
  57. HackerRank stack problem - Balanced Brackets.
  58. HackerRank stack problem - Equal Stacks.
  59. HackerRank stack problem - Game Of Two Stacks.
Knowledge Centre
Default value of a local variables?
The local variables are not initialized to any default values. We should not use local variables with out initialization. Even the java compiler throws error.
Famous Quotations
We know what we are, but know not what we may be.
-- William Shakespeare

About Author

I'm Nataraja Gootooru, programmer by profession and passionate about technologies. All examples given here are as simple as possible to help beginners. The source code is compiled and tested in my dev environment.

If you come across any mistakes or bugs, please email me to [email protected].

Most Visited Pages

Other Interesting Sites

Reference: Java™ Platform Standard Ed. 7 - API Specification | Java™ Platform Standard Ed. 8 - API Specification | Java is registered trademark of Oracle.
Privacy Policy | Copyright © 2022 by Nataraja Gootooru. All Rights Reserved.