• 141. Linked List Cycle


    一、题目

      1、审题

        

      2、分析

        给出一个链表,查看其中是否存在一个环。

    二、解答

      1、思路:

        方法一、

          使用一个 Set 存储遍历的节点,当当前遍历的节点不存在于 Set 中,则加入 Set,若已存在于 Set,则返回 true。

        public boolean hasCycle(ListNode head) {
            
            ListNode tmpNode = head;
            Set<ListNode> set = new HashSet<ListNode>();
            while(tmpNode != null) {
                if(set.contains(tmpNode))
                    return true;
                set.add(tmpNode);
                tmpNode = tmpNode.next;
            }
            return false;
        }

      

      方法二、

        设置两个指针,walker 每次向后移动一个单位,runner 每次向后移动两个单位。

        若 List 中存在一个环,则最终 walker 与 runner 会有相遇。

        public boolean hasCycle(ListNode head) {
            if(head == null)
                return false;
            
            ListNode walker = head;
            ListNode runner = head;
            while(runner.next != null && runner.next.next != null) {
                walker = walker.next;
                runner = runner.next.next;
                if(walker == runner)
                    return true;
            }
            return false;
        }
  • 相关阅读:
    代码示例_触摸屏驱动
    代码示例_中断下半部
    代码示例_mmap的实现
    代码示例_阻塞IO
    代码示例_LCD控制
    代码示例_平台总线
    驱动_I2c驱动框架
    驱动_Input输入子系统
    Windows切换桌面或窗口快捷键
    几何分布
  • 原文地址:https://www.cnblogs.com/skillking/p/9775308.html
Copyright © 2020-2023  润新知