Program Java untuk Mengesan gelung dalam LinkedList

Dalam contoh ini, kita akan belajar untuk mengesan sama ada terdapat gelung dalam LinkedList di Java.

Untuk memahami contoh ini, anda harus mempunyai pengetahuan mengenai topik pengaturcaraan Java berikut:

  • Java LinkedList
  • Kaedah Java

Contoh: Detect Loop dalam LinkedList

 class LinkedList ( // create an object of Node class // represent the head of the linked list Node head; // static inner class static class Node ( int value; // connect each node to next node Node next; Node(int d) ( value = d; next = null; ) ) // check if loop is present public boolean checkLoop() ( // create two references at start of LinkedList Node first = head; Node second = head; while(first != null && first.next !=null) ( // move first reference by 2 nodes first = first.next.next; // move second reference by 1 node second = second.next; // if two references meet // then there is a loop if(first == second) ( return true; ) ) return false; ) public static void main(String() args) ( // create an object of LinkedList LinkedList linkedList = new LinkedList(); // assign values to each linked list node linkedList.head = new Node(1); Node second = new Node(2); Node third = new Node(3); Node fourth = new Node(4); // connect each node of linked list to next node linkedList.head.next = second; second.next = third; third.next = fourth; // make loop in LinkedList fourth.next = second; // printing node-value System.out.print("LinkedList: "); int i = 1; while (i <= 4) ( System.out.print(linkedList.head.value + " "); linkedList.head = linkedList.head.next; i++; ) // call method to check loop boolean loop = linkedList.checkLoop(); if(loop) ( System.out.println("There is a loop in LinkedList."); ) else ( System.out.println("There is no loop in LinkedList."); ) ) )

Pengeluaran

 LinkedList: 1 2 3 4 Terdapat gelung dalam LinkedList.

Dalam contoh di atas, kami telah menerapkan LinkedList di Java. Kami telah menggunakan algoritma pencarian kitaran Floyd untuk memeriksa sama ada terdapat gelung dalam LinkedList.

Perhatikan kod di dalam checkLoop()kaedah. Di sini, kita mempunyai dua pemboleh ubah bernama pertama dan kedua yang melintasi nod di LinkedList.

  • pertama - melintasi dengan 2 nod pada lelaran tunggal
  • kedua - melintasi dengan 1 nod pada lelaran tunggal

Dua nod melintasi dengan kelajuan yang berbeza. Oleh itu, mereka akan bertemu sekiranya terdapat gelung masuk LinkedList.

Artikel menarik...