linked-list-cycle-ii leetcode C++

mac2022-06-30  52

Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.

Follow up: Can you solve it without using extra space?

C++

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* detectCycle2(ListNode *head){ ListNode *fast = head; ListNode *slow = head; if(head==NULL) return NULL; while (NULL != fast){ if (fast != NULL) fast = fast->next; if (fast != NULL) fast = fast->next; if (slow != NULL) slow = slow->next; while(fast != NULL && slow == fast){ slow = head; while(slow!=fast){ fast = fast->next; slow = slow->next; } return slow; } } return NULL; } ListNode *detectCycle(ListNode *head) { ListNode *fast = head; ListNode *slow = head; if (NULL == head) return NULL; while(fast && fast->next){ fast = fast->next->next; slow = slow->next; if (fast != NULL && slow == fast) return FindTheFirstSameNode(fast,head); } return NULL; } ListNode *FindTheFirstSameNode(ListNode* head1, ListNode* head2){ while(head1 != head2){ head1 = head1->next; head2 = head2->next; } return head1; } };

 

转载于:https://www.cnblogs.com/vercont/p/10210280.html

最新回复(0)