循环链表 稍复杂点。

肯能会有0 或 6 字型的单向循环链表。  接下来创建 单向循环链表 并 查找单向循环链表中的循环节点。

这里已6字型单向循环链表为例。

//创建 循环链表
Student * CreateCircleLink_Table(void){
int i = ;
Student *head = NULL;
head = (Student *)malloc(sizeof(Student));
head->name[]='\0';
head->point = ;
head->stu = NULL;
//循环节点
Student *circleStu = NULL;
Student *temp = NULL;
Student *currentNode = head;
while (i<=) { temp = (Student *)malloc(sizeof(Student));
strncpy(temp->name,"Node",sizeof(temp->name));
temp->point = i;
temp->stu = NULL; currentNode->stu = temp;
currentNode = temp; //循环节点
if (i==) {
circleStu = currentNode;
} i++;
} //最后 合并循环节点
currentNode->stu = circleStu; return head;
} //已知循环节点 查询 主要为了验证循环链表是否可用
void SelectCircleLinkTable(Student *student){
Student *next = student->stu;
int i = ;
Student *circleStu = NULL; while (next) {
if (circleStu!=NULL&&next->point == circleStu->point) {
printf("循环节点%d,结束循环\n",next->point);
break;
} if (i==) {
circleStu = next;
}
printf("index %d; studentName is %s; point is %d\n",i,next->name,next->point);
i++;
next = next->stu;
}
} //查找循环链表中循环节点
Student * SelectCircleNodeInLinkTable(Student *student) {
Student *fast = student;
Student *slow = student; Student *circleStu = NULL;
while (fast->stu) {
fast = fast->stu->stu;//快指针节点 为慢指针节点的2倍
slow = slow->stu; if (fast==NULL) { //不存在循环节点
return NULL;
}
if (fast == slow) {//快慢指针相遇。找到循环节点
circleStu = fast;
break;
} } if (fast==NULL) { //不存在循环节点
return NULL;
}
printf("相遇节点为==%d\n",circleStu->point);
fast=student;
while (fast!=slow) {
slow=slow->stu;
fast=fast->stu;
}
return fast;
} int main(void){
char sf[]; // /**
// * 创建单向链表
// */
// int num;
// printf ("请输入学生人数\n");
// scanf("%d",&num);
// Student *link_stu = CreateLink_Table(num);
//
//
// /**
// * 单向链表插入节点
// */
// printf ("请插入节点内容 在 已存在节点名字的后面,如 已存在节点名字|待插入名字|待插入分数 \n");
// scanf("%s",sf);
//
// link_stu = insertStudentLinkTable(link_stu,sf);
//
// /**
// * 反转单向链表
// */
// printf("反转链表Y|N \n");
// scanf("%s",sf);
// if (strcmp(sf,"Y")==0) {
// Student *newLt= ReversionStudentLinkTable(link_stu);
// //查询
// selectStudent(newLt);
// } /**
* 创建循环链表
*/
Student *student = NULL;
printf("开始创建循环链表Y|N \n");
scanf("%s",sf);
if (strcmp(sf,"Y")==) {
student = CreateCircleLink_Table();
} printf("已知情况查询循环链表Y|N \n");
scanf("%s",sf);
if (strcmp(sf,"Y")==) {
SelectCircleLinkTable(student);
} printf("未知情况查询循环链表Y|N \n");
scanf("%s",sf);
if (strcmp(sf,"Y")==) {
Student *circleStu = SelectCircleNodeInLinkTable(student);
printf("=====循环节点==%d\n",circleStu->point);
} return ;
}

参考这便:http://blog.csdn.net/wenqian1991/article/details/17452715

复习下C 链表操作(单向循环链表、查找循环节点)的更多相关文章

  1. 复习下C 链表操作(双向循环链表,查找循环节点)

    双向循环链表  和 单向循环链表 查找循环节点 思路都是一样. 快慢指针查找法. 理论可参考 c 链表之 快慢指针 查找循环节点 typedef struct Student_Double { ]; ...

  2. c 链表之 快慢指针 查找循环节点

    参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...

  3. c 链表之 快慢指针 查找循环节点(转)

    上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指 ...

  4. 复习下C 链表操作(单向链表)

    Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不 ...

  5. 复习下C 链表操作(双向链表)

    双向链表 创建.删除.反转.插入 //struct #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  6. linux下的文本操作之 文本查找——grep

    摘要:你有没有这样的应用场景:调试一个程序,出现debug的提示信息,现在你需要定位是哪个文件包含了这个debug信息,也就是说,你需要在一个目录下的多个文件(可能包含子目录)中查找某个字符串的位置: ...

  7. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  8. linked-list-cycle-ii——链表,找出开始循环节点

    Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follo ...

  9. linux 内核的链表操作(好文不得不转)

    以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...

随机推荐

  1. 软件工程各阶段的UML图

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6616876.html UML是统一建模语言,主要用于软件的分析与设计阶段.但是UML有这么多图,具体怎么用呢? ...

  2. 通过 Apache Commons HttpClient 发送 HTTPS 请求

    1.通过 HTTPS 发送 POST 请求: 2.HTTPS 安全协议采用 TLSv1.2: 3. 使用代理(Proxy)进行 HTTPS 访问: 4.指定 Content-Type 为:applic ...

  3. PhoneGap开发的android项目环境搭建简单流程

      首先已经下载好最新的PhoneGap源代码. 已经装eclipse,android sdk及adt的安装和配置. 1.进入eclipse界面,新建android工程 new > androi ...

  4. 【PMP】资源平衡与资源平滑

    资源平衡:为了在资源需求与资源供给之间取得平衡,根据资源制约因素对开始日期和完成日期进行调整的一种技术 资源平滑:对进度模型中的活动进行调整,从而使项目资源需求不超过预定的资源限制的一种技术. 案例说 ...

  5. vs code 问题:preLaunchTask“build”已终止,退出代码为 1。解决办法

    菜单:任务-配置任务 改为如下: { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation ab ...

  6. Win极速文件搜索Listary

    对于开源的everything在win下搜索文件很高效了.不过在listary功能上更加的丰富..支持正则搜索 对比: 都是基于本地磁盘索引,进而实现快速搜素 00.有能力的还是购买pro,当然也有免 ...

  7. PLSQL创建DBLINK

    Oracle创建dblink,多用于数据的同步机制.不建议直接用dblink对数据库频繁的操作... 00.查看创建dblink权限 select * from user_sys_privs t wh ...

  8. C++中public、protected及private使用方法

    1.类的一个特征就是封装,public和private作用就是实现这一目的.所以: 用户代码(类外)能够訪问public成员而不能訪问private成员:private成员仅仅能由类成员(类内)和友元 ...

  9. 初始建库SGA该设多大、PGA该设多大的建议

    1.背景情况 非常多新业务系统上线,大部分DBA也不懂业务.就闷着头建库,SGA值设多大,PGA设多大,随便指定一个值就得了,执行一段时间后,或许就由于这个值是随便指定的.比如SGA+PGA大于总物理 ...

  10. jQuery对象复制

    // 浅层复制(只复制顶层的非 object 元素) var newObject = jQuery.extend({}, oldObject); // 深层复制(一层一层往下复制直到最底层) var ...