Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 程序檢測LinkedList中是否存在循環(huán)

Java 實(shí)例大全

在此示例中,我們將學(xué)習(xí)Java中的檢測LinkedList中是否存在循環(huán)。

要理解此示例,您應(yīng)該了解以下Java編程主題:

示例:檢測LinkedList中的循環(huán)

class LinkedList {

  //創(chuàng)建Node類的對(duì)象
  //表示鏈表的頭部
  Node head;

  //靜態(tài)內(nèi)部類
  static class Node {
    int value;

    //將每個(gè)節(jié)點(diǎn)連接到下一個(gè)節(jié)點(diǎn)
    Node next;

    Node(int d) {
      value = d;
      next = null;
    }
  }

  //檢查是否存在循環(huán)
  public boolean checkLoop() {

    //在LinkedList的開頭創(chuàng)建兩個(gè)引用
    Node first = head;
    Node second = head;

    while(first != null && first.next !=null) {

      //將第一個(gè)引用移動(dòng)2個(gè)節(jié)點(diǎn)
      first = first.next.next;

      //將第二個(gè)引用移動(dòng)1個(gè)節(jié)點(diǎn)
      second = second.next;

      //如果兩個(gè)引用相等(遇)
      if(first == second) {
        return true;
      }
    }

    return false;
  }

  public static void main(String[] args) {

    //創(chuàng)建LinkedList的對(duì)象
    LinkedList linkedList = new LinkedList();

    //為每個(gè)鏈表節(jié)點(diǎn)賦值
    linkedList.head = new Node(1);
    Node second = new Node(2);
    Node third = new Node(3);
    Node fourth = new Node(4);

    //將鏈表的每個(gè)節(jié)點(diǎn)連接到下一個(gè)節(jié)點(diǎn)
    linkedList.head.next = second;
    second.next = third;
    third.next = fourth;

    //在LinkedList中進(jìn)行循環(huán)
    fourth.next = second;

    //打印節(jié)點(diǎn)值
    System.out.print("LinkedList: ");
    int i = 1;
    while (i <= 4) {
      System.out.print(linkedList.head.value + " ");
      linkedList.head = linkedList.head.next;
      i++;
    }

    //調(diào)用方法檢查循環(huán)
    boolean loop = linkedList.checkLoop();
    if(loop) {
      System.out.println("\n在 LinkedList 中有一個(gè)循環(huán).");
    }
    else {
      System.out.println("\nLinkedList中沒有循環(huán).");
    }
  }
}

輸出結(jié)果

LinkedList: 1 2 3 4 
在 LinkedList 中有一個(gè)循環(huán).

在上面的示例中,我們已經(jīng)用Java 實(shí)現(xiàn)了LinkedList。我們使用了Floyd的循環(huán)查找算法來檢查 LinkedList 中是否存在循環(huán)。

注意checkLoop()方法中的代碼。在這里,我們有兩個(gè)名為first,second的變量,它們遍歷LinkedList中的節(jié)點(diǎn)。

  • first - 在單次迭代中使用2個(gè)節(jié)點(diǎn)進(jìn)行遍歷

  • second - 在單次迭代中使用1個(gè)節(jié)點(diǎn)進(jìn)行遍歷。

兩個(gè)節(jié)點(diǎn)以不同的速度遍歷。 因此,如果LinkedList中有循環(huán),它們將相遇。

Java 實(shí)例大全

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清