复习下C 链表操作(双向循环链表,查找循环节点)
双向循环链表 和 单向循环链表 查找循环节点 思路都是一样。 快慢指针查找法。 理论可参考
- typedef struct Student_Double
- {
- char name[];
- int point;
- struct Student_Double *preStu;
- struct Student_Double *nextStu;
- } StudentDouble;
- StudentDouble * CreateDoubleCircleLink_Table(){
- int i = ;
- StudentDouble *head = NULL;
- head=(StudentDouble *)malloc(sizeof(StudentDouble));
- head->name[]='\0';
- head->point = ;
- head->nextStu = NULL;
- head->preStu = NULL;
- //循环节点
- StudentDouble *cirleStu = NULL;
- StudentDouble *temp = NULL;
- StudentDouble *currentNode = head;
- while (i<=) {
- temp = (StudentDouble *)malloc(sizeof(StudentDouble));
- strncpy(temp->name,"Node",sizeof(temp->name));
- temp->point = i;
- temp->nextStu = NULL;
- temp->preStu = currentNode;
- currentNode->nextStu = temp;
- currentNode = temp;
- if (i==) {
- cirleStu = currentNode;
- }
- i++;
- }
- //最后 合并循环节点
- currentNode->nextStu=cirleStu;
- return head;
- }
- //已知循环节点情况查询循环 链表,验证是否可用
- void SelectDoubleLinkTable(StudentDouble *student){
- StudentDouble *next = student->nextStu;
- int i = ;
- StudentDouble *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->nextStu;
- }
- }
- //未知情况查询循环节点
- StudentDouble * SelectCircleNodeInDoubleLinkTable(StudentDouble *head){
- //快慢指针查询
- StudentDouble *fast = head;
- StudentDouble *slow = head;
- while (fast) {
- fast = fast->nextStu->nextStu;
- slow = slow->nextStu;
- if (fast==NULL) {//不是循环链表推出
- break;
- }
- if (fast==slow) {//快慢指针相遇
- break;
- }
- }
- if (fast == NULL) {
- printf("该链表 不是循环链表\n");
- return NULL;
- }
- //查找循环节点
- fast = head;
- while (fast!=slow) {
- fast=fast->nextStu;
- slow=slow->nextStu;
- }
- printf("=====找到循环链表循环节点为%d\n",fast->point);
- return fast;
- }
- int main(void){
- char sf[];
- //创建双向循环链表
- StudentDouble *head = NULL;
- printf("创建双向循环链表Y|N\n");
- scanf("%s",sf);
- if (strcmp(sf,"Y")==) {
- head = CreateDoubleCircleLink_Table();
- }
- printf("已知情况查询循环链表Y|N \n");
- scanf("%s",sf);
- if (strcmp(sf,"Y")==) {
- SelectDoubleLinkTable(head);
- }
- printf("未知情况查询循环链表Y|N \n");
- scanf("%s",sf);
- if (strcmp(sf,"Y")==) {
- SelectCircleNodeInDoubleLinkTable(head);
- }
- return ;
- }
复习下C 链表操作(双向循环链表,查找循环节点)的更多相关文章
- 复习下C 链表操作(单向循环链表、查找循环节点)
循环链表 稍复杂点. 肯能会有0 或 6 字型的单向循环链表. 接下来创建 单向循环链表 并 查找单向循环链表中的循环节点. 这里已6字型单向循环链表为例. //创建 循环链表 Student * ...
- 复习下C 链表操作(双向链表)
双向链表 创建.删除.反转.插入 //struct #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- c 链表之 快慢指针 查找循环节点
参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...
- c 链表之 快慢指针 查找循环节点(转)
上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指 ...
- 复习下C 链表操作(单向链表)
Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不 ...
- linux下的文本操作之 文本查找——grep
摘要:你有没有这样的应用场景:调试一个程序,出现debug的提示信息,现在你需要定位是哪个文件包含了这个debug信息,也就是说,你需要在一个目录下的多个文件(可能包含子目录)中查找某个字符串的位置: ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- 后台开发 3个题目 array_chunk, 100块钱找零钱(动态规划 dynamic programming), 双向循环链表 llist 删除节点
1. array_chunk 实现 http://php.net/manual/en/function.array-chunk.php <?php function my_array_chunk ...
- linked-list-cycle-ii——链表,找出开始循环节点
Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follo ...
随机推荐
- 【Java】 剑指offer(15) 数值的整数次方
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 实现函数double Power(double base, int ...
- Scrapy爬虫笔记 - 爬取知乎
cookie是一种本地存储机制,cookie是存储在本地的 session其实就是将用户信息用户名.密码等)加密成一串字符串,返回给浏览器,以后浏览器每次请求都带着这个sessionId 状态码一般是 ...
- springboot Autowired BeanNotOfRequiredTypeException
现象 org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'xxxxImpl' is expect ...
- 生产环境中tomcat的配置
生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/sh ...
- 搞IT,算法编程不错的学习网址 & 一些专栏博客大神的地址(汇总)
博客专栏大神 王晓华(算法的乐趣) 算法系列:http://blog.csdn.net/orbit/article/category/830251 PostgreSQL深入理解内核系列:http:// ...
- STL之heap与优先级队列Priority Queue详解
一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...
- 菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog. ...
- UIView的层次结构–code
转:http://blog.dongliwei.cn/archives/uiview-tree-code // Recursively travel down the view tree, incre ...
- http://blog.csdn.net/wzzvictory/article/details/16994913
原文地址:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是cla ...
- Java断言绝对不是鸡肋
在防御式编程中经常会用断言(Assertion)对参数和环境做出判断,避免程序因不当的输入或错误的环境而产生逻辑异常,断言在很多语言中都存在,C.C++.Python 都有不同的断言表示形式.在Jav ...