链表中环的入口结点
- 参与人数:1927时间限制:1秒空间限制:32768K
- 算法知识视频讲解
题目描述
一个链表中包含环,请找出该链表的环的入口结点。
为什么第一次做的时候没有写博客??
// 链表中环的入口结点.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead){
if (pHead == NULL || pHead->next == NULL) return NULL ;
ListNode* p1 = pHead ;
ListNode* p2 = pHead ;
int length = 0 ;
while (p2 != NULL || p2->next != NULL) {
p1 = p1->next ;
p2 = p2->next->next ;
if (p1 == p2) {
break ;
}
}
p1 = pHead ;
p2 = pHead ;
for (int i = 0; i < length; ++i) {
p1 = p1->next ;
}
while (p1 != p2) {
p1 = p1->next ;
p2 = p2->next ;
}
return p1 ;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ListNode p1(1);
ListNode p2(2);
ListNode p3(3);
ListNode p4(4);
ListNode p5(5);
p1.next = &p2 ;
p2.next = &p3 ;
p3.next = &p4 ;
p4.next = &p5 ;
p5.next = &p3 ;
Solution s;
s.EntryNodeOfLoop(&p1);
return 0;
}
本文介绍了一种寻找链表中环入口节点的有效算法。通过使用快慢指针的方法,首先确定链表是否存在环,然后找到环的入口节点。文章提供了完整的C++代码实现,并通过实例演示了算法的具体应用。
1760

被折叠的 条评论
为什么被折叠?



