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;
    }
};
posted @ 2023-05-24 09:46  胡少辉  阅读(10)  评论(0)    收藏  举报