题解 | #判断链表中是否有环#

判断链表中是否有环

http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

既然有环的时候,环头的地址必然出现2次,那么使用find时间复杂度为O(1)的哈希表,用链表元素的地址进行依次插入,并每次插入前检查是否存在即可。

/**

  • Definition for singly-linked list.
  • struct ListNode {
  • int val;
  • ListNode *next;
  • ListNode(int x) : val(x), next(NULL) {}
  • };
  • /

    include

    class Solution {
    public:
    bool hasCycle(ListNode *head) {
      unordered_map<struct ListNode*, struct ListNode*> map;
      if(head == NULL){return false;}
      struct ListNode *p = head;
      while(p->next != NULL){
          if(map.find(p) != map.end()){
              return true;
          }
          else {
              map.insert(pair<struct ListNode*, struct ListNode*>(p,p));
              p = p->next;
          }
      }
      return false;
    }
    };
全部评论

相关推荐

秋招投简历提醒助手:个人经验是,一般面二十场左右就会进入侃侃而谈阶段。我今年七月末的时候开始的第一次面试,都是很多不会,回复很慢。后面慢慢迭代,到九月中的时候基本上面啥说啥,很放松的状态
远程面试的尴尬瞬间
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务