链表求环

LeetCode 141. Linked List Cycle 142.Linked List Cycle II

已知链表中可能存在环,若有环返回环起始节点,否则返回NULL。


算法1:使用set求环起始节点

1.遍历链表,将链表中节点对应的指针(地址),插入set
2.在遍历时插入节点前,需要在set中查找,第一个在set中发现的节点地址,即是链表环的起点。


class Solution{
public:
    ListNode * detectCycle(ListNode *head){
    std:: set<ListNode *> node_set;//设置node_set
    while(head){
    if(node_set.find(head) != node_set.end()){
    return head;
}
node_set.insert(head);//将节点插入node_set
head = head->next;
}
return NULL;//没有遇到环,则返回NULL
}
}
算法2:快慢指针赛跑




结论:从head和meet出发,两指针速度一样,相遇时即为环的起点
class Solution{
public:
    ListNode * detectCycle(ListNode *head){
    ListNode *fast = head;//快慢指针
    ListNode *slow = head;
    ListNode *meet = NULL;
    while(fast){
    slow = slow->next;
    fast = fast->next;
    if(!fast){
        return NULL;//如果遇到链表尾,返回NULL
    }
fast = fast->next;
   if(fast ==  slow){
      meet = fast;  
      break;
  }
}
if(meet == NULL){
  return NULL;  
}
while(head && meet){
    if(head == meet){
        return head;    
}
head = head->next;
meet = meet->next;
}
return NULL;
}

};
测试与Leetcode提交结果
int main(){
  ListNode a(1);
  ListNode b(2);
  ListNode c(3);
  ListNode d(4);
  ListNode e(5);
  ListNode f(6);
  ListNode g(7);
  a.next = &b;
  b.next = &c;
  c.next = &d;
  d.next = &e;
  e.next = &f;
  f.next = &g;
  g.next =&c;
  Solution solve;
  ListNode *node = solve.detectCycle(&a);
  if(node){
    printf("%d\n",node->val);
  else{
      printf("NULL\n");
  }  
return 0;
}

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,701评论 0 6
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,503评论 2 36
  • 链表 记录《剑指offer》中所有关于链表的题目,以及LeetCode中的相似题目 相关题目列表 题目 链表是面试...
    wenmingxing阅读 1,276评论 0 11
  • 链表问题是面试过程中经常被问到的一部分,很考查编程功底。最近刷了 LeetCode 上链表部分的面试题,我总结了一...
    JohnnyShieh阅读 5,163评论 0 9
  • 最近看《鸿观》听宋鸿兵老师对2017年世界及经济大势判断的复盘,总的基本面是判断准确了。我看了之后,有点小冲动,就...
    sjuce阅读 289评论 0 1

友情链接更多精彩内容