• 剑指offer——判断链表中是否有环


    题目链接:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    解题思路:

    //左神讲的
    //先说个定理:两个指针一个fast、一个slow同时从一个链表的头部出发
    //fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇
    //此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内),
    //这次两个指针一次走一步,相遇的地方就是入口节点。
    //这个定理可以自己去网上看看证明。
     
     1 /*
     2  public class ListNode {
     3     int val;
     4     ListNode next = null;
     5 
     6     ListNode(int val) {
     7         this.val = val;
     8     }
     9 }
    10 */
    11 public class Solution {
    12 
    13     public ListNode EntryNodeOfLoop(ListNode pHead)
    14     {
    15         ListNode fast = pHead;
    16         ListNode slow = pHead;
    17         
    18         while(fast!=null && fast.next!=null)
    19         {
    20             fast = fast.next.next;
    21             slow =slow.next;
    22             
    23             if(fast ==slow)
    24                 break;
    25         }
    26         
    27         if(fast==null || fast.next==null)
    28             return null;
    29         fast = pHead;
    30         
    31         while(fast!=slow)
    32         {
    33             fast =fast.next;
    34             slow = slow.next;
    35         }
    36         return fast;
    37         
    38     }
    39 }
  • 相关阅读:
    太湖杯WriteUp
    第九届网安竞赛writeup
    湖湘杯2020 writeup
    利用DNS缓存和TLS协议将受限SSRF变为通用SSRF
    十月学习计划
    2020GACTF部分wp
    2020 天翼杯 部分wp
    DASCTF 安恒七月赛wp
    开发步骤
    垃圾收集器与内存分配策略
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10896275.html
Copyright © 2020-2023  润新知