有关单链表带环的问题
2017-03-16 22:46
246 查看
1.检查链表是否带环,若带求长度,环入口点。
设定两个快慢指针开始时指向起始位置,开始出发,如果这两个指针相交,那么存在环;从交点出发,当再次回到此点便可统计环长度;对与于环入口点,假设快指针每次走两个位置,慢一直走一个,如图所示:
则只需一个从起始点,一个从交点移动,必会相交。
2. 检查两链表否相交(链表不带环)
如果两链表得最后一个位置相等,则相交。
如果带环得话:
以下代码没有实现两个带环的相交
设定两个快慢指针开始时指向起始位置,开始出发,如果这两个指针相交,那么存在环;从交点出发,当再次回到此点便可统计环长度;对与于环入口点,假设快指针每次走两个位置,慢一直走一个,如图所示:
则只需一个从起始点,一个从交点移动,必会相交。
2. 检查两链表否相交(链表不带环)
如果两链表得最后一个位置相等,则相交。
如果带环得话:
以下代码没有实现两个带环的相交
pNode CheckCycle(pList plist) //判断环 { pNode fast = plist; pNode slow = plist; do { if (fast->next == NULL && fast == NULL) return NULL; fast = fast->next->next; slow = slow->next; } while (slow != fast); return slow; } int GetCycleLen(pList plist) //环长度 { int len = 0; pNode cur = plist; do { len++; cur = cur->next; } while (cur != plist); return len; } pNode GetCycleEntryNode(pList plist, pNode meet) //入口点 { pNode entry = plist; while (entry != meet) { entry = entry->next; meet = meet->next; } return entry; } int CheckCross(pList L1, pList L2) //相交(不带环) { pNode prelist1 = L1; pNode prelist2 = L2; while (L1) { prelist1 = L1; L1 = L1->next; } while (L2) { prelist2 = L2; L2 = L2->next; } if (prelist1 == prelist2) return 1; else return 0; }
相关文章推荐
- 浅析有关链表的带环问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 【链表1】有关链表环的各种问题
- 链表中的带环相交问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 带环单链表及链表相交问题的分析及代码实现
- 约瑟夫环问题的亲身实践(和循环链表有关)!
- 链表——带环问题
- 链表面试题之带环问题
- 与单链表有关的算法问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 65. 链表是否带环、环入口、环长度、链表相交问题分析与总结
- 判断带环单链表问题
- C语言强化(七)链表相交问题_3 判断链表是否带环
- 链表带环问题求解?是否带环,环的入口点,环长度
- 判断链表中是否有环 ----- 有关单链表中环的问题
- C语言强化(七)链表相交问题_3 判断链表是否带环
- c/c++单链表面试题—链表带环问题
- 带环链表得几个问题
- 判断链表中是否有环 ----- 有关单链表中环的问题