2019/2/28leetcode 爱之初体验

本文详细解析了LeetCode上关于链表有环问题的解决思路与常见错误,强调了双指针技巧的应用,并深入探讨了空指针边界条件的处理,以及C语言中顺序判断的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:leetcode数据结构部分题目,之前leetcode很多部分不明白,所以链表那道基础题没有通过,下回会继续看。今天通过的是利用双指针判断链表是否有环的问题,下面做一丢丢记录。

对于这种题目,其实思路已经非常明白。这里的重点是注意到空指针这个边界条件,提示runtime估计就是空指针的问题。

首先将任务抽象为两种情况的终点,一种为有环,则两指针终于会相遇,一种为无环,那么一定会遍历出NULL。问题就是要考虑到所有的NULL情况。其实因为我们设定了以二为步长的指针之后,可以利用该指针及该指针的衍生遍历所有情况。所以就是有以下情况:

初始判断:空。单独。

偶判断:(fats=head->next;)fast->next==NULL

奇判断:fast->next->next=NULL;

 

编程的时候经常出现错误的地方在于,输入有误,这是因为好久没写代码导致的。比如next前面的符号->,就漏了一个-。然后最后梳理的时候发现问题清晰明了,但刚开始结题的时候还是操之过急,没有抽象问题。

另外,分享自己的一个错误,是自己一直卡着的错误(这里很感谢自己刚开始没发现的leetcode的提交反馈的信息,可以看到是哪一个样例错误了)。就是if(ptr2->next==NULL||ptr2->next->next==NULL)和if(ptr2->next->next==NULL||ptr2->next==NULL)是有区别的,C语言是讲究顺序的,所以只有先判断了ptr2->next的存在,才有ptr2->next->next存在。这个问题不该犯,暴露了编程习惯很有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值