判断一个链表是否有循环
 int  isLoop(List l) {
2 if ( ! l)  return   - 1 ;
     if ( ! l)  return   - 1 ;
3 List s  =  l.next;
    List s  =  l.next;
4 while (s  &&  s != l)  {
      while (s  &&  s != l)  {
5 s  =  s.next;
        s  =  s.next;
6 }
    } 
7 if  ( ! s)  return   - 1 ;
     if  ( ! s)  return   - 1 ;
8 else  reutrn  1 ;
     else  reutrn  1 ;
9 }
} 
1 int isLoop(List l){
int isLoop(List l){
2 if(!l) return 0;
    if(!l) return 0;
3 p=l.next;
    p=l.next;
4 wihle(p!=l&&p!=null) {
    wihle(p!=l&&p!=null) {
5 l.next=l;
        l.next=l;
6 l=p;p=p.next;
        l=p;p=p.next;
7 }
    }
8 if(p=l) return 1;
    if(p=l) return 1;
9 return 0;
    return 0;
10 }
}
从链表头开始遍历,如果节点next指针指向自身,则循环存在;否则将next指针指向自身,遍历下一个节点。直至next指针为空,此时链表无循环。
2
 if ( ! l)  return   - 1 ;
     if ( ! l)  return   - 1 ;3
 List s  =  l.next;
    List s  =  l.next;4
 while (s  &&  s != l)  {
      while (s  &&  s != l)  {5
 s  =  s.next;
        s  =  s.next;6
 }
    } 7
 if  ( ! s)  return   - 1 ;
     if  ( ! s)  return   - 1 ;8
 else  reutrn  1 ;
     else  reutrn  1 ;9
 }
} 1
 int isLoop(List l){
int isLoop(List l){2
 if(!l) return 0;
    if(!l) return 0;3
 p=l.next;
    p=l.next;4
 wihle(p!=l&&p!=null) {
    wihle(p!=l&&p!=null) {5
 l.next=l;
        l.next=l;6
 l=p;p=p.next;
        l=p;p=p.next;7
 }
    }8
 if(p=l) return 1;
    if(p=l) return 1;9
 return 0;
    return 0;10
 }
}从链表头开始遍历,如果节点next指针指向自身,则循环存在;否则将next指针指向自身,遍历下一个节点。直至next指针为空,此时链表无循环。
 
                    
                     
                    
                 
                    
                
 
  
    
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号