Leetcode Java Linked List Cycle
업데이트:
문제
코드
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
ListNode fast = head;
ListNode slow = head;
while (fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) {
return true;
}
}
return false;
}
}
결과
설명
-
주어진 ListNode head가 순회하는 포인트가 존재하는지를 검증하는 문제이다.
-
head가 null인 경우 순회가 불가능하므로, false를 주어진 문제의 결과로 반환한다.
-
검증을 위해 fast와 slow를 head를 주입하여 정의한다.
- fast.next와 fast.next.next가 null이 아닐 때 까지 반복하여 검증을 수행한다.
- fast에 fast.next.next 값을 주입하여 다다음 ListNode로 이동한다.
- slow에 slow.next 값을 주입하여 다음 ListNode로 이동한다.
- fast와 slow가 동일하면 순회가 되는 포인트가 있는 경우이므로, true를 주어진 문제의 결과로 반환한다.
- 반복이 종료되면 null이 되는 순간이 존재한다는 의미이므로, false를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기