leetcode解题之环形链表

允我心安 提交于 2020-02-05 10:36:33

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是
-1,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1 输出:false 解释:链表中没有环。

进阶:

你能用 O(1)(即,常量)内存解决此问题吗?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/linked-list-cycle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

想的比较简单,使用Object对象作为键保存链表中的节点,然后查找节点在map中是否存在,如果存在链表中就存在环

/**
 * 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) {
        Map<ListNode,Integer> map = new HashMap<>();
        ListNode tempNode = head;
        int index=0;
        while(tempNode!=null){
            if(map.containsKey(tempNode)){
                return true;
            }else{
                map.put(tempNode,index++);
                tempNode=tempNode.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||head.next==null){
           return false;
       }
       ListNode slow = head,fast = head.next;
       while(slow!=fast){
           if(fast==null||fast.next==null){
               return false;
           }
           slow=slow.next;
           fast=fast.next.next;
       }
        return true;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!