剑指offer-链表中环的入口点

来源:互联网 发布:苏州网络推广 编辑:程序博客网 时间:2024/06/05 03:20

题目:

一个链表中包含环,如何找出环的入口结点。


ListNode *MeetingNode(ListNode *head)//找出环中的一个结点,利用快慢指针来实现;{if (head == NULL)return NULL;ListNode *slow = head->next;ListNode *quick = head->next;if (slow == NULL)return NULL;while (quick != NULL&&slow != NULL){if (quick == slow)return quick;slow = slow->next;quick = quick->next;if (quick != NULL){quick = quick->next;}}return NULL;}ListNode *EntryNodeOfLoop(ListNode *pHead)//{ListNode *meetingNode = MeetingNode(pHead);ListNode *pNode1 = meetingNode;int numberOfLoop = 1;while (pNode1->next != meetingNode){pNode1 = pNode1->next;numberOfLoop++;}//求环中结点个数pNode1 = pHead;for (int i = 0; i < numberOfLoop; i++)pNode1 = pNode1->next;ListNode *pNode2 = pHead;while (pNode1 != pNode2){pNode1 = pNode1->next;pNode2 = pNode2->next;}return pNode1;}


原创粉丝点击