网站制作报价ihanshi,百度推广需要什么条件,深圳网站建设南山,免费不需要登录的手游一、要求
给你一个链表的头节点 head #xff0c;判断链表中是否有环。
如果链表中有某个节点#xff0c;可以通过连续跟踪 next 指针再次到达#xff0c;则链表中存在环。 为了表示给定链表中的环#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置判断链表中是否有环。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。注意pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 则返回 true 。 否则返回 false 。 二、思路
使用快慢指针的方式来解决环形链表问题。
首先定义两个指向head的struct ListNode*类型的指针变量用来记录开始位置
接下来判断链表是否为空链表以及链表的首项指向的地址是否为空
确保上述条件后开始让phead1和phead2分别向前走一步和两步
再他们向后走的过程中一旦遇到指向NULL的问题说明该链表不是环形链表
不为NULL就继续向后走
此时按照上述判断已经确定该链表为环形链表
对链表的地址进行判断当两链表指向的地址相同时说明该链表为环形链表。
三、画图理解 四、代码实现
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
bool hasCycle(struct ListNode* head) {struct ListNode* phead1 head;struct ListNode* phead2 head;while (phead2 ! NULL phead2-next ! NULL) {phead1 phead1-next;phead2 phead2-next-next;if (phead1 phead2)return true; }return false;
}
五、小思考 while (phead2 ! NULL phead2-next ! NULL) {
这里为什么是使用的phead2来进行判断而不是使用的phead1来判断的呢
请在评论区留下你的答案吧