142. 环形链表 II(找循环点)

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。表为无头结点、单向。(由于涉及到结构体,所以写不了完整的测试代码,下面展示的代码为LeetCode中写的代码)

//第一次尝试:
//方法:图文解释:
142. 环形链表 II(找循环点)
//当然,这个方法有点不好想,我们还可以这样做:(这里就不演示了)
142. 环形链表 II(找循环点)
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;

}

}
//如果链表无环,那么就不会进入下面的循环中,而是指直接返回NULL
//有环就从头结点和相遇点开始遍历,直到二者相遇,返回交点

while(fast&&fast->next){

if(fast == head){

return fast;

}

fast = fast->next;

head = head->next;

}

return NULL;

}

 

以上是 142. 环形链表 II(找循环点) 的全部内容, 来源链接: utcz.com/a/77799.html

回到顶部