判断单链表是否带环的算法

packagecircle_single_link;

 

/**

 * @authorzhou shengshuai

 *

 */

class Node {

    String info= "";

    Node nextN= null;

 

    public Node(String info, Node nextN) {

          this.info= info;

          this.nextN= nextN;

    }

}

 

class CircleLink {

 

    public static void isCircleLink(Node firstN) {

          Node point1 = firstN;

          Node point2 = firstN;

 

          /*

           * This do...while block judge whether thislink is circle or not.

           */

          do{

             point1 = point1.nextN;

             System.out.print(point1.info+"\t||\t");

 

             point2 = point2.nextN.nextN;

             System.out.println(point2.info);

          } while(point2.nextN !=null && point1 != point2);

 

          /*

           * if Node.next is null, it explain this linkisn't circle link.

           */

          if(point2.nextN ==null)

             return;

 

          /*

           * This while block find the circle node.

           */

          point2 = firstN;

          while(point2 != point1) {

             point2 = point2.nextN;

             point1 = point1.nextN;

          }

 

          System.out.println("The First Circle Link Node is: " + point1.info);

    }

}

 

public class SingleLinkWithCircle {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

          Node node5 = newNode("5",null);

          Node node4 = newNode("4", node5);

          Node node3 = newNode("3", node4);

          Node node2 = newNode("2", node3);

          Node node1 = newNode("1", node2);

 

          node5.nextN= node2;

 

          CircleLink.isCircleLink(node1);

    }

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值