链表经典面试题三

题型十一:判断单链表是否带环,若带环,求出环的长度,环的入口点,

1、判断是否带环:

判断一个链表是否带环的带环的条件是,当链表不带环时尾节点指向空,当链表带环时,链表没有尾节点。

ListNode* IsCycle(ListNode* pHead)//判断链表是否带环,若带环,返回快慢指针相遇的节点
{
     ListNode* cur = pHead;
     ListNode* slow = pHead;
     ListNode* fast = pHead;
     while (cur)
     {
          cur = cur->pNext;
          while (fast&&fast->pNext)
          {
              slow = slow->pNext;
              fast = fast->pNext->pNext;
              if (slow->data == fast->data)
              {
                   return slow;
              }
          }
     }
     return NULL;//不带环,最后一个节点指向NULL
}

2、求环的长度:

分析:用快慢指针遍历这个带环的链表,当快慢指针指向的节点相等时,那么此时,这个节点一定在环内,在从这个节点出发&

你可能感兴趣的:(计算机科学与技术)