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; } };
原文地址:https://www.cnblogs.com/eilearn/p/9241243.html
时间: 2024-10-25 03:48:44