142. 环形链表 II(找循环点)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null
。表为无头结点、单向。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码)
//第一次尝试:
//方法:图文解释:
//当然,这个方法有点不好想,我们还可以这样做:(这里就不演示了)
struct ListNode* detectCycle(struct ListNode* head) {if(head == NULL){returnfalse;}
struct ListNode* fast = head;struct ListNode* slow = head;
//快慢指针法,循环遍历找相遇点while(fast&&fast->next){fast
= fast->next->next;slow
= slow->next;if(slow == fast){break;}
}
while(fast&&fast->next){if(fast == head){return fast;
//如果链表无环,那么就不会进入下面的循环中,而是指直接返回NULL
//有环就从头结点和相遇点开始遍历,直到二者相遇,返回交点}
fast
= fast->next;head
= head->next;}
return NULL;}
以上是 142. 环形链表 II(找循环点) 的全部内容, 来源链接: utcz.com/a/77799.html