链表环入口
题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出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。
}
};`
浙公网安备 33010602011771号