判断单链表中环的长度等问题
来源:互联网 发布:零基础学php要多久 编辑:程序博客网 时间:2024/06/14 23:55
给定一个单链表,只给出头指针h:
1、判断是否存在环
选定两个指针p1,p2,初始时p1=p2=h,循环执行以下操作p1=p1+1,p2=p2+2,判断p1==p2,若p1==p2,记交点为p,则存在环,否则不存在。(追赶问题)
2、求取环的长度
从p开始执行以下操作p1=p1+1,p2=p2+2,再次相交时,执行的操作数,即为环的长度。(追赶问题)
3、找出环的连接点
p点到交点的距离=h到交点的距离。
证明:
证毕
4、带环链表的长度
s+s1
code---根据上图构建链表
#include <stdio.h>#include <stdlib.h>typedef struct chain{int num;struct chain* next;}CH,NODE;NODE* newnode(void){NODE* temp;temp=(NODE*)malloc(sizeof(NODE));return temp;}NODE* createchain(void){int i;NODE* temp,*save=NULL,*h,*p;for(i=1;i<=7;i++){temp=newnode();temp->num=i;if(save==NULL){save=temp;h=save;}else{save->next=temp;save=temp;}if(i==4){p=save;}}save->next=p;return h;}void checkloop(NODE* h){int len1=0,len2=0;NODE* p1,*p2;p1=p2=h;p1=p1->next;p2=p2->next->next;while(p1!=p2){p1=p1->next;p2=p2->next->next;}len1=1;p1=p1->next;p2=p2->next->next;while(p1!=p2){p1=p1->next;p2=p2->next->next;len1++;}printf("The length of the loop is: %d\n",len1);p1=h;while(p1!=p2){len2++;p1=p1->next;p2=p2->next;}printf("The intersect node is: %d\n",p1->num);printf("The length of the chain is: %d\n",len1+len2);}int main(void){CH* h;h=createchain();checkloop(h);system("pause");return 0;}
0 0
- 判断单链表中环的长度等问题
- ftl判断是否相等,判断是否为空,得到list长度的问题、截取字符串长度
- LinkedList 合并、环的长度、翻转等问题
- 判断字符串的长度
- TextArea的长度判断
- 判断json的长度
- 数组长度判断时出现的诡异问题总结
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)
- 判断字符串的字节长度
- 判断发表的时间长度
- jquery判断中文的长度
- 汇编指令长度的判断
- 判断Json数据的长度
- 汇编指令长度的判断
- iOS中判断数组长度问题
- Java判断字符串为空的方法,效率等问题
- Angular展示页面、判断纯数字长度,搜索,添加等
- 验证添加信息,判断数字,长度等(week3)
- Maven系列之附录A-maven插件配置
- Android ActionBar入门
- 说说Android桌面(Launcher应用)背后的故事(三)——CellLayout的秘密
- Struts2学习(第六篇)——获取servletAPI和封装表单数据
- 哈尔滨理工大学第四届ACM程序设计竞赛F: 背包
- 判断单链表中环的长度等问题
- Codeforces 53A Autocomplete
- 说说Android桌面(Launcher应用)背后的故事(四)——揭秘Workspace
- Aaron Swartz:如何提高效率
- 马云回忆与乔布斯的见面 论创新之必要条件
- oracle常见错误代码说明备忘
- Ubutn操作系统学习笔记三之------文件系统基本结构
- 两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
- 说说Android桌面(Launcher应用)背后的故事(五)——桌面壁纸的添加