美文网首页
leetcode141.环形链表

leetcode141.环形链表

作者: WillamZ | 来源:发表于2019-10-16 11:29 被阅读0次

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

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

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

超时版:

/**
 * 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) {
        int pos = 0;
        ListNode curNode = head;
        ListNode nextNode = head.next;
        
        //当链表只有一个节点时,返回false
        if(nextNode == null){
            return false;
        }
        
        /*遍历检查链表中是否有一个节点返回当前节点,
        没有则将下一节点设为当前节点继续遍历,当存在后续节点等于当前节点时返回true,否则返回false*/
        while(nextNode != null){
            while(true){
                if(nextNode.next == curNode ){
                    return true;
                }else if(nextNode.next == null){
                    return false;
                }else{
                    nextNode = nextNode.next;
                    break;
                }
            }
            curNode = curNode.next;
            nextNode = curNode.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) {
        //慢指针每次前进1,快指针每次前进二,若有环则快慢指针会相等
        if(head == null || head.next == null){
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while(slow != fast){
            if(fast == null || fast.next ==null){
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}

相关文章

  • leetcode142.环形链表II

    题目链接本题是对于上一题 leetcode141.环形链表 的扩展题目,在我的文章 链表相关基础题及答案解析 中,...

  • leetcode141.环形链表

    给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(...

  • Leetcode141. 环形链表

    题目 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的...

  • LeetCode141. 环形链表

    原题链接 思路:快慢指针,两个指针首先同时指向头部,然后一个指针每次走两个,一个指针每次走一个,两个指针相遇之后,...

  • leetcode141.环形链表

    题目链接 解法一:哈希表 代码如下: 代码运行结果: 因为需要依次遍历数组,而且使用了额外的数据结构HashSet...

  • LeetCode141.环形链表

    1.题目描述 给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则...

  • 实现单向-双向环形链表

    单向环形链表 双向环形链表

  • 判断链表是否有环(LeetCode141.环形链表)

    题目 给定一个链表,判断链表中是否有环。 解析 题目本身不困难在LeetCode中也是简单等级。简单的方法是使用H...

  • 双指针

    一、双指针总结 1.1题目 快慢指针(主要解决链表中的问题) 141.环形链表 142.环形链表 II 876.链...

  • 02-14:leetcode重刷8之哈希与数组

    链表: 判断链表是否环形、是否回文 1、是否链表 #Definitionforsingly-linkedlist....

网友评论

      本文标题:leetcode141.环形链表

      本文链接:https://www.haomeiwen.com/subject/heytyctx.html