zoukankan      html  css  js  c++  java
  • 单链表找环起点、

    推荐:博客

    对于查找链表是否有环,可以通过遍历链表,两个指针,指针p一次走两个节点,指针q一次走一个节点,两指针相遇则链表有环,

    对于查找有环链表环的入口可以通过两个指针,指针p从相遇点开始遍历,指针q从起点开始遍历,相遇点则为环的入口,推倒如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
            ListNode *p = head;
            ListNode *q = head;
            bool is_circle = false;
            if(head == NULL) return NULL;
            while(p->next != NULL && p->next->next != NULL){
                p = p->next->next;
                q = q->next;
                if(p == q) {
                    is_circle = true;
                    break;             
                }
            }
            if(is_circle){
                q = head;
                while(p != q){
                    q = q->next;
                    p = p->next;
                }
                return q;
            }
            return NULL;
        }
    };
  • 相关阅读:
    Docker 镜像
    Docker 安装命令
    Docker 基本概念
    Redis 高可用之"持久化"
    Git 安装和使用
    oracle角色
    oracle权限
    审计
    手动创建数据库
    oracle口令文件认证
  • 原文地址:https://www.cnblogs.com/chenyang920/p/13900432.html
Copyright © 2011-2022 走看看