【练习】【链表】力扣热题100 141. 环形链表
题目
- 环形链表
来源:力扣热题100 141. 环形链表
思路(注意事项)
快慢指针。
纯代码
/**
* 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) {
if (head == nullptr || head -> next == nullptr) return false;
ListNode *p = head -> next, *q = p -> next;
while (p != q && q != nullptr)
{
p = p -> next;
q = q -> next;
if (q != nullptr) q = q -> next;
}
if (q == p) return true;
else return false;
}
};
题解(加注释)
/**
* 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) {
// 如果链表为空或只有一个节点,直接返回 false
if (head == nullptr || head -> next == nullptr) return false;
// 定义两个指针 p 和 q,分别指向 head 的下一个节点和下下个节点
ListNode *p = head -> next, *q = p -> next;
// 使用快慢指针法遍历链表
while (p != q && q != nullptr)
{
p = p -> next; // 慢指针 p 每次走一步
q = q -> next; // 快指针 q 每次走两步
if (q != nullptr) q = q -> next;
}
// 如果 p 和 q 相遇,说明链表有环
if (q == p) return true;
// 否则,链表无环
else return false;
}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/52895.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!