建网站哪家质量好网络销售管理条例
使用HashSet,从头遍历链表并写入哈希表,遍历每个元素找哈希表是否出现过,如果出现过则存在环。
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
添加元素可以使用 add() 方法,add方法的返回值类型是boolean,所以如果返回值是null那么表示添加成功。
/*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public boolean hasCycle(ListNode head) {Set<ListNode> storeSet = new HashSet<ListNode>(); while(head!=null){if(!storeSet.add(head)){return true;}head=head.next;}return false;}
}
双指针(快慢指针),如果快慢指针相遇则链表中存在环,慢指针一次只移动一个节点,快指针一次移动两个节点(没想到)
/*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public boolean hasCycle(ListNode head) {if(head==null){return false;}ListNode slowPtr=head,fastPtr=head;while(fastPtr.next!=null&&fastPtr.next.next!=null){slowPtr=slowPtr.next;fastPtr=fastPtr.next.next;if(slowPtr==fastPtr){return true;}}return false;}
}