《剑指offer》刷题笔记3
-
学习内容
链表中的环的入口结点
(1)思路
如果链表是一个空链表,或者只有一个结点的链表,答案是NULL。
如果链表是至少有两个结点的线性链表,那么答案也是NULL。
如果链表包含环,那么入口结点的地址一定出现且仅出现两次。特别情况就是整个链表是个环,那么入口结点是这个单链表的第一个结点。要找到整个链表中地址出现两次的结点。可把结构体结点的地址当做关键字,使用哈希表。这里使用现成的set容器,很棒。
set容器使用参考:https://www.cnblogs.com/AndyJee/p/4705846.html
(2)代码/*
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :
val(x), next(NULL) {
}
};
/
class Solution {
public:
ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHeadNULL ||pHead->nextNULL)return NULL;set<ListNode*> Hash; ListNode* pNode=pHead; while(pNode!=NULL) { if(Hash.find(pNode)==Hash.end()) { Hash.insert(pNode); pNode=pNode->next; } else { return pNode; } } return NULL; }
};
-
参考网站
https://cuijiahua.com/blog/2018/02/basis_67.html
https://www.cnblogs.com/AndyJee/p/4705846.html