标签:环路 面试题 p1 ListNode 02.08 head fast next slow
题目:
解答:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *detectCycle(ListNode *head) 12 { 13 14 ListNode* slow = head; 15 ListNode* fast = head; 16 17 while(fast && fast->next) 18 { 19 slow = slow->next; 20 fast = fast->next->next; 21 22 if(slow == fast) // 相遇 23 { 24 25 break; 26 } 27 } 28 // 若无相会处,则无环路。 29 if(fast == nullptr || fast->next == nullptr) 30 { 31 return nullptr; 32 } 33 34 ListNode* p1 = head; 35 ListNode* p2 = fast; 36 // 若两者以相同的速度移动,则必然在环路起始处相遇 37 while(p1 != p2) 38 { 39 p1 = p1->next; 40 p2 = p2->next; 41 } 42 43 return p1; 44 } 45 };
标签:环路,面试题,p1,ListNode,02.08,head,fast,next,slow 来源: https://www.cnblogs.com/ocpc/p/12861058.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。