leetcode题目
linked-list-cycle
题目描述
* Given a linked list, determine if it has a cycle in it.
* Follow up:
* Can you solve it without using extra space?
思路
* 1、快慢指针同时遍历链表,相遇即存在环,否则不存在
代码
package com.leetcode.list;
/**
* 题目:
* linked-list-cycle
*
* 题目描述:
* Given a linked list, determine if it has a cycle in it.
* Follow up:
* Can you solve it without using extra space?
*/
public class ListHasCircle {
static class ListNode{
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
/**
* 思路:
* 1、快慢指针同时遍历链表,相遇即存在环,否则不存在
*
* @param head 头节点
*/
public boolean hasCircle(ListNode head) {
if (head == null || head.next == 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;
}
public static void main(String[] args) {
ListNode head = createTestLinkedList();
ListNode newHead = new ListNode(13);
newHead.next = head;
head.next.next = newHead;
System.out.println(new ListHasCircle().hasCircle(newHead));
}
private static ListNode createTestLinkedList() {
ListNode head = new ListNode(0);
ListNode curNode = head;
for (int i = 1; i < 10; i++) {
curNode.next = new ListNode(i);
curNode = curNode.next;
}
return head;
}
}