分享

程序员面试攻略 3.9 面试例题:空链表与循环链表

 shaobin0604@163.com 2006-10-23

3.9面试例题:空链表与循环链表
给定一个链表,它可能是以NULL结尾的非循环链表,如图3-5所示;也可能是一个循环结构结尾的循环链表。已知这个链表的头指针,请编写一个函数来判断该链表是一个循环链表还是一个非循环链表,该函数不得对链表本身做任何修改。
算法:

让快慢两个指针从链表的头元素出发开始遍历
无限循环
 如果快指针遇到了“NULL”指针
  返回,该链表以“NULL”结束,是一个非循环链表
 如果快指针追上或者超过了慢指针
  返回,该链表是一个循环链表
 让慢指针前进一个结点
 让快指针前进两个结点

int determineTermination(node *head) {
 node *fast, *slow;
 fast = slow = head;
 for (;;) {
  if (fast != null || fast->next != null)
   return 0;
  else if (fast == slow || fast->next == slow)
   return 1;
  else {
   slow = slow->next;
   fast = fast->next->next;
  }
 }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多