一个链表中,如果有环则输出环的入口节点,否则输出NULL

来源:互联网 发布:java 大并发处理 编辑:程序博客网 时间:2024/06/07 04:11

1 利用快慢指针,如果有环,俩个指针一定在环内相遇,否则没有环

2 俩个指针相遇后,让其中一个从头开始遍历,另一个在相遇点遍历,相遇点记为入口点。

代码:

   ListNode *detectCycle(ListNode *head) {        if(head==NULL)            return NULL;        ListNode* slow=head;        ListNode* fast=head;        while(fast!=NULL&&fast->next!=NULL){            slow=slow->next;            fast=fast->next->next;            if(slow==fast)                break;        }        if(fast==NULL || fast->next==NULL)            return NULL;        slow=head;        while(fast!=slow){            fast=fast->next;            slow=slow->next;        }        return slow;    }


阅读全文
0 0
原创粉丝点击