2023.5.22 环形链表
2022.5.22环形链表
题目描述:
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
解题思路:
分析题目可知,环存在的条件就是链表会重复回到某一个位置,因此可以想到解题方法就是:遍历链表,并将每一个节点保存,每到一个新节点,就先对比在已经保存的节点中是否有重复,若没有,就将此节点插入,并继续循环,如果有,那么就返回true。
实现:
根据题解,我今天了解了一个新知识哈希表,但我也只是初步了解了一下,使用也是调用的C++的STL模板库中的unordered_set函数。他可以很容易的实现解题思路中的存入数据,并且比对数据。这个了解后,设计程序就很简单了。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
unordered_set<ListNode*> seen;
while(head !=nullptr)
{
if(seen.count(head))
return true;
seen.insert(head);
head=head->next;
}
return false;
}
};

浙公网安备 33010602011771号