环形链表双指针小结

本文探讨了一道力扣上的链表题目,涉及如何使用快慢指针检测链表中是否存在环。作者分析了错误代码中存在的问题:在if-else语句中直接返回结果导致只有满足特定条件时才有返回值。为了解决这个问题,作者修改了代码,移除了else部分并在while循环结束后返回false。这样确保了无论是否找到环,都会有一个明确的返回值。
摘要由CSDN通过智能技术生成

力扣上做的一道关于双指针的练习题目
要解决的问题:找出给定的一个链表是否有环
解决思路:快指针和慢指针(双指针)

步骤分析:(while循环语句)
(1)创建指向头节点的两个指针,快指针和慢指针
(2)设置条件:快指针不为空并且指向的后继也不能为空
(3)有环条件:快指针和满指针相遇

自己写的代码执行出错
分析原因:使用了if ----else语句操作返回值,程序出错。因为值返回了一个值,如果条件不满足将不会有返回值,所以出错
解决:需要再加一个返回值。
错误代码
class Solution {
public:
bool hasCycle(ListNode head) {
//创建快慢指针
ListNode
slowptr=head;//指向头节点
ListNode*fastptr=head;//指向头节点
//条件:快指针本身不能为空,并且指向不能为空
while(fastptr!=NULL&&fastptr->next!=NULL)
{
slowptr=slowptr->next;
fastptr=fastptr->next->next;
//判断节点是否重合
if(slowptr==fastptr)
{
return true;
}
else
{
return false;
}
}

}

};
正确代码
class Solution {
public:
bool hasCycle(ListNode head) {
ListNode
fast = head;
ListNode* slow = head;
while(fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
// 快慢指针相遇,说明有环
if (slow == fast) return true;
}
return false;
}
};
参考:https://leetcode-cn.com/problems/linked-list-cycle/comments/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值