141环形链表 Posted on 2020-04-20 Words count in article: 385 | Reading time ≈ 1 141环形链表写在前面 因为原稿在操作时不慎丢失,所以忍痛再写!肯定不会比之前详细了 下面是题目 下面是题目给出的代码1234567891011121314/** * 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) { } }; 下面是题解123456789101112131415161718192021222324252627282930313233 class Solution {public: bool hasCycle(ListNode *head) { ListNode *cur1 {head} ;//cur1 是快指针 ListNode *cur2 {head};//cur2 是慢指针 if(head||head->next)//如果头节点就是空,那就直接输出false return false; while(cur1 &&cur2 ) // 当当前的快指针和快指针指向的空间不为空,那么就可以进行一种“追赶操作“,此外,在同一链表中使用快慢指针,可以确定链表的中心所在节点 //这里需要注意,只能是先cur1!=NULL再写cur1->next!=NULL,这是有顺序的,反过来会报错! { cur1 = cur1->next;//每次执行,快指针指向后面第二个空间 cur2 = cur2->next;//慢指针指向后面第一个空间 //如果这是一个循环链表,那么cur1,cur2一直处于一个循环的状态 //而因为cur1跑得比cur2快,所以最终会追上cur2 //所以当他们重合时,就是我们要证明的——是循环链表。 if(cur1) { cur1 = cur1->next; }else { return } if (cur1 ==cur2) return true; } //如果到最后cur1指向的区域为NULL,那么很遗憾吗,跳出了循环,直接输出false return false; } }; -------------本文结束,感谢您的阅读------------- Post author: Jason Post link: https://jasonxqh.github.io/2020/04/20/141%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8/ Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.