判断一个链表是否有循环。
实际上,在我的面试过程中,还问到了不破坏结构的其他算法。
我的答案是从链表头开始遍历,如果节点next指针指向自身,则循环存在;否则将next指针指向自身,遍历下一个节点。直至next指针为空,此时链表无循环。
1
int isLoop(List l) {
2
if ( ! l) return - 1 ;
3
List s = l.next;
4
while (s && s != l) {
5
s = s.next;
6
}
7
if ( ! s) return - 1 ;
8
else reutrn 1 ;
9
}
int isLoop(List l) {2
if ( ! l) return - 1 ;3
List s = l.next;4
while (s && s != l) {5
s = s.next;6
} 7
if ( ! s) return - 1 ;8
else reutrn 1 ;9
} 1
int isLoop(List l){
2
if(!l) return 0;
3
p=l.next;
4
wihle(p!=l&&p!=null) {
5
l.next=l;
6
l=p;p=p.next;
7
}
8
if(p=l) return 1;
9
return 0;
10
}
int isLoop(List l){2
if(!l) return 0;3
p=l.next;4
wihle(p!=l&&p!=null) {5
l.next=l;6
l=p;p=p.next;7
}8
if(p=l) return 1;9
return 0;10
}实际上,在我的面试过程中,还问到了不破坏结构的其他算法。
我的答案是从链表头开始遍历,如果节点next指针指向自身,则循环存在;否则将next指针指向自身,遍历下一个节点。直至next指针为空,此时链表无循环。

浙公网安备 33010602011771号