美文网首页
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;
        }
    }
    

    相关文章

      网友评论

          本文标题:leetcode141.环形链表

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