判断链表是否带环,以及环的入口
2017-07-15 13:09
204 查看
给出一个链表,先判断链表是否带环,如果带环,求出环的入口。
判断是否带环:用快慢指针。快指针每走两步,慢指针走一步,如果两者在某个点处相
遇,则链表带环。
下边给出函数的实现代码:
如果
如果链表带环,看下边的图:
![](https://img-blog.csdn.net/20160624132935560?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码:
判断是否带环:用快慢指针。快指针每走两步,慢指针走一步,如果两者在某个点处相
遇,则链表带环。
下边给出函数的实现代码:
typedef struct LinkNode { DataType data; struct LinkNode *next; }LinkNode,*pLinkNode; typedef struct LinkList { LinkNode *pHead; }LinkList,*pLinkList; pLinkNode isCircle(pLinkList plist) { assert(plist); if (NULL == plist->pHead) { printf("链表为空\n"); return NULL; } pLinkNode fast = plist->pHead; pLinkNode slow = plist->pHead; while (fast && fast->next) { fast = fast->next->next; slow = slow->next; if (fast == slow) return fast; } return NULL; }
如果
如果链表带环,看下边的图:
代码:
pLinkNode firstCrossNode(pLinkList plist) { assert(plist); if (NULL == plist->pHead) { printf("链表是空\n"); return NULL; } pLinkNode ret = isCircle(plist); if (ret == NULL) { printf("链表不带环\n"); return NULL; } pLinkNode fast = plist->pHead; pLinkNode slow = ret; while (fast) { fast = fast->next; slow = slow->next; if (fast == slow) return fast; } }
相关文章推荐
- 判断链表是否带环,以及环的入口
- 链表--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 单向链表相交的第一个公共结点, 判断链表是否有环以及环的入口节点
- 判断链表是否有环以及查找环的入口点——淘宝笔试归来
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 判断单链表是否是循环链表以及找出循环链表入口
- 链表 是否带环,环的长度以及入口点
- 链表面试题之判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否有环以及找出环的入口点知识总结
- day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象
- 单链表中判断是否有环以及得出环的入口点(简单易懂)
- 判断链表是否带环?若带环求环的长度?求环的入口点?
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 判断一个链表是否有环以及环的位置入口
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否有环,环的入口以及环的长度
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
- 链表——判断链表是否有环以及环的入口结点