代码题(15)— 环形链表
Posted eilearn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码题(15)— 环形链表相关的知识,希望对你有一定的参考价值。
1、141. 环形链表
给定一个链表,判断链表中是否有环。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(head == nullptr || head->next == nullptr) return false; ListNode* slow = head; ListNode* fast = head; while(fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; if(slow == fast) return true; } return false; } };
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(head == nullptr || head->next == nullptr) return false; ListNode* slow = head; ListNode* fast = head->next->next; while(slow != fast) { if(fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; } else return false; } return true; } };
2、142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null
。
说明:不允许修改给定的链表。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *detectCycle(ListNode *head) { if(head == nullptr || head->next == nullptr) return nullptr; ListNode* slow = head; ListNode* fast = head->next->next; while(slow != fast) { if(fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; } else return nullptr; } fast = fast->next; int num = 1; while(slow != fast) { num++; fast = fast->next; } fast = head; for(int i=0;i<num;++i) fast = fast->next; slow = head; while(fast != slow) { slow = slow->next; fast = fast->next; } return slow; } };
以上是关于代码题(15)— 环形链表的主要内容,如果未能解决你的问题,请参考以下文章