博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五、判断单链表是否有环,并找到环的入口点
阅读量:2185 次
发布时间:2019-05-02

本文共 714 字,大约阅读时间需要 2 分钟。

(原理参考:)

/*判断链表有环,并返回环的入口点*/struct list_head *find_loop_point(struct list_head *head){    struct list_head *slow = head;    struct list_head *fast = head;        /*如果head为空,或者为单结点,则不存在环*/    if (!head || !head->next)        return NULL;        /*从链表头开始,slow每次走一步,fast每次走两步,若相遇,则表示链表存在环*/    while (fast != NULL && fast->next != NULL) {        slow = slow->next;        fast = fast->next->next;        if (slow == fast)/*存在环*/            break;    }    if (fast != slow)/*不存在环*/        return NULL;    /*接下来要判断环的入口点,让slow依旧保存着上面环内相遇节点,让fast重新指向链表头*/    fast = head;    /*每次各走一步,当两指针再次相遇时,相遇节点就是环的入口点*/    while (fast != slow) {        fast = fast->next;        slow = slow->next;    }    /*返回环的入口点*/    return fast;}

 

转载地址:http://udqkb.baihongyu.com/

你可能感兴趣的文章
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>