链表环入口

题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路:如果一个链表有环的话,一直遍历下去肯定会遇到一个已经遍历过的节点,第一个重复节点就是环的入口。
因此可使用哈希的方法,来记录已经遍历过的节点,当遍历时发现该节点已经遍历过,则返回该节点。
`/*
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :
val(x), next(NULL) {
}
};
/
class Solution {
public:
ListNode
EntryNodeOfLoop(ListNode
pHead)
{
map<ListNode,int> m; //使用map来实现哈希表,也可以用其他的结构,比如set
ListNode
head=pHead;
while(head){ //判断链表是否遍历完,单链表若遍历完,则退出
if(m[head]!=1){ //是否访问过
m[head]=1;
head=head->next;
}
else //访问过,返回该节点。
return head;
}
return NULL; //单链表,返回null。

}

};`

posted @ 2020-07-19 17:07  321菜鸟起飞  阅读(117)  评论(0)    收藏  举报